请问springboot可以从前台一次性接受多个参数吗

标题可能表达的不是很清楚,就是在springboot的controller层中接收前台传来的参数,能不能接收一个以上呢,比如我前台传给前台的是两个不同的实体类对象,然后我在controller层接收的时候,能不能用两个参数接收,像public AjaxResult list (Student student,Teacher teacher){},之前都是用一对一或者一对多的方式从前台传过来,然后用一个参数接收,请问可以这样做吗,如果可以,请问怎么做呢,谢谢

@PathVariable:路径变量
@RequestParam表单参数
这个两都可以 不过更建议使用
@RequestBody 这样更方便

可以的,用对象封装后接收

这篇文章:springboot中后台接受前台传递的对象数组 也许有你想要的答案,你可以看看

你要是只是想知道能不能,这玩意儿是不是自己尝试一下就知道了;
你要是还想知道原理,也不是这问法

这个可以用kv编码加上一个参数解析器,不过v得是json字符串

img


    @PostMapping("form")
 public RestResp<User> form(@StrToObj User teacher, @StrToObj User student) {
        return new RestResp<>();
    }

@Target({ElementType.METHOD,ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface StrToObj {

    Class<?> value() default Map.class;

}

public class StringObjectMethodArgumentResolver implements HandlerMethodArgumentResolver {

    @Override
    public boolean supportsParameter(MethodParameter parameter) {
        return parameter.hasParameterAnnotation(StrToObj.class) && parameter.getParameterType() != String.class;
    }

    @Override
    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
        HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class);
        if(request == null){
            return null;
        }
        return JacksonUtils.fromJson(request.getParameter(parameter.getParameterName()),parameter.getParameterType());
    }
}

主要就是四个注解:@RequestBody、@RequestParam、@PathVariable和@PathParam
@RequestBody注解:后端接收前端传递过来的json字符串中的数据;只能在方法的参数前使用且最多只能使用一个。
@RequestParam注解:RequestParam接收的是key-value里面的参数;同样只能在方法的参数中使用,但是它可以在方法参数使用多个,这点和RequestBody注解不一样,它可以用普通参数、集合、数组和对象等。
@RequestBody和@RequestParam可以同时使用,但是RequestBody只能使用一次而RequestParam可以出现多次。RequestBody接收的是请求体里里面的数据,即当前台以json/application传递过来时,那么只能使用@RequestBody接收;如果不是放在请求体里的话,那么就需要使用@RequestParam接收或者形参前什么也不写也能接收。
@PathVariable和@PathParam()这两个注解同样是只能用于方法的参数前,用于接收请求参数;@PathVariable和@PathParam()是从URL模板里面来填充的

https://github.com/zhikecore/superblog
欢迎关注,持续更新中

你说的那种方式不可以的,对象格式的参数,一般前端通过json,按照一定格式,放到请求体中,后端通过@RequestBody获取解析并转换成对应的bean,可以将两个对象,合并成一个,比如就叫A对象,对象里面有Student stu和Teacher teac两个属性,对象转换后,也是可以获取到你想要的参数格式的。

当然,一般见到的参数,比如id什么的,就可以通过放到URL后面拼接,后端再获取就可以了

如果有帮助的话,麻烦采纳一下回答,非常感谢。

应该是可以的,但必须是post请求。不过我们的做法一般是写一个类,在这类里面加上你所说的的Student,Teacher

@Data
public class TestReq {
    
    private Student student;
    
    private Teacher teacher;
}

然后接口上加上@RequestBody注解

public void test(@RequestBody TestReq testReq)