报错:
IllegalStateException: No primary or default constructor found for interface java.util.List
出现位置:
@RequestMapping("loadByIds")
@ResponseBody
public ResponseDO loadByIds(List<Integer> list){
userService.loadListByids(list);
return ResponseDO.sucess("loadByIds", "操作成功");
}
原因:
由于Controller层接受的是List集合,Spring找不到对应的转换器。
解决方法
在list前面放 @RequestParam(“list”)
@RequestMapping("loadByIds")
@ResponseBody
public ResponseDO loadByIds(@RequestParam("list") List<Integer> list){
userService.loadListByids(list);
return ResponseDO.sucess("loadByIds", "操作成功");
}
成功结局问题。
记录一下 @RequestParam、@PathVariabale 和 @RequestBody 区别
@RequestParam 是将前端请求行中的key value数据映射到对应的Java对象,可以设置多个
源码:
@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestBody {
boolean required() default true; //设置是否必须
}
@RequestBody 是将请求体当中的数据JSON数据映射到对应的java对象当中行,其中参数名要一一对应,用于POST请求。
源码:
@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestParam {
@AliasFor("name")
String value() default "";//对应的参数名
@AliasFor("value")
String name() default "";
boolean required() default true;// 是否必须
String defaultValue() default "\n\t\t\n\t\t\n\ue000\ue001\ue002\n\t\t\t\t\n";
}
@PathVariabale应用在restful风格
@PathVariabale(value=“id”,require=true ):支持restful风格的url,获取占位符参数;require是否必须待参数,默认true
源码
@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface PathVariable {
@AliasFor("name")
String value() default "";
@AliasFor("value")
String name() default "";
boolean required() default true;
}
使用:
@RequestMapping("/testPathVariable/{id}")
public void testPathVariable(@PathVariable(id) Integer id){
System.out.print(id)
}
补充:
记录一下
- @RequestHeader(“Accept-Language”):获取请求消息头,标识获取消息头类型
- @CookieValue(“keyName”):用于获取cookie值,标识key的值
参考