标题可能表达的不是很清楚,就是在springboot的controller层中接收前台传来的参数,能不能接收一个以上呢,比如我前台传给前台的是两个不同的实体类对象,然后我在controller层接收的时候,能不能用两个参数接收,像public AjaxResult list (Student student,Teacher teacher){},之前都是用一对一或者一对多的方式从前台传过来,然后用一个参数接收,请问可以这样做吗,如果可以,请问怎么做呢,谢谢
@PathVariable:路径变量
@RequestParam表单参数
这个两都可以 不过更建议使用
@RequestBody 这样更方便
可以的,用对象封装后接收
这篇文章:springboot中后台接受前台传递的对象数组 也许有你想要的答案,你可以看看你要是只是想知道能不能,这玩意儿是不是自己尝试一下就知道了;
你要是还想知道原理,也不是这问法
这个可以用kv编码加上一个参数解析器,不过v得是json字符串
@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)