Controller层一定要try catch一下,不然里面报的错可能导致程序报错。
catch中就表示有错误就 Return ResultUtils.err(e.getMessage())
必填项校验
- 在实体属性中添加注解
@NotNull : 用在基本类 型上 不能为null 但可以为空字符串
@NotEmpty : 用在集合类上 不能为空 并且长度必须大于0
@NotBlank : 只能作用在String上,不能为null,而且调用trim()后,长度必须大于0
@Length:表示长度
@Pattern:表示正则表达式
@Email:表示邮箱格式
@Min:最小值
@Max:最大值 更多注解看后面
@NotBlank(message = "项目不能为空")
@Length(max = 12, message = "用户真实姓名不能超过12位")
@Pattern(regexp = "^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\\d{8})$", message = "手机号格式不正确")
@Email
@Min(value = 0, message = "最小值为0")
@Max(value = 2, message = "最大值为2")
@ApiModelProperty(value = "项目id")
@TableField("PROJECT_ID")
private String projectId;
- Controller中请求实体添加@Valid注解和BindingResult
import org.springframework.validation.BindingResult;
import javax.validation.Valid;
private Map<String,String> getErrors(BindingResult result){
Map<String,String> map = new HashMap<>();
List<FieldError> errorList = result.getFieldErrors();
errorList.forEach((e) -> {
// e.getField() 实体类属性名称;e.getDefaultMessage() 为空时的message
map.put(e.getField(),e.getDefaultMessage());
});
return map;
}
@RequestParam注解
controller层传多个参数的时候使用或者传一个List类型的参数也需要加该注解,因为List是个接口,没有构造方法,如果不用@RequestParam注解就会报错:No primary or default constructor
建议:controller层的参数,都用该注解标注
参数是list
方法1:将list封装到一个对象中,用对象接收
传参如下:
{
"appointDealers":[
{
"code":"1008",
"fullName":"服务站008",
"shortName":"01",
"state":"州1",
"city":"市1",
"region":"区1",
"address":"地址1",
"status":"1"
},
{
"code":"1009",
"fullName":"服务站009",
"shortName":"02",
"state":"州2",
"city":"市2",
"region":"区2",
"address":"地址2",
"status":"1"
}
]
}
方法2:用String接收
@PostMapping("/addCapacityScoreByProjId.do")
@ResponseBody
public CommonResult addCapacityScoreByProjId(
@RequestParam("projectId") String projectId, @RequestParam("jsonList") String jsonList){
//前端传过来的都是jsonStr,需要转为对象List(com.alibaba.fastjson)
List<CapacityNameScoreVo> list = JSONArray.parseArray(jsonList, CapacityNameScoreVo.class);
capacityService.addCapacityScoreByProjId(projectId, list);
return ResultUtil.result();
}
jsonList 传过来是这样的:
[{"capacityName": "管理能力","score": "0.5","scoreType":"2"},{"capacityName": "执行力","score": "0.1","scoreType":"1"},{"capacityName": "思想品德","score": "1","scoreType":"3"}]
@RequestBody注解
作用:将json字符串转为对象
传过来的参数是这样的,可以直接对应到一个对象的属性的话,可以直接用对象接收,使用@RequestBody注解即可:
例如:参数是这样的
{username: “adm”, pageNo: 1, pageSize: 2}
@ApiOperation(value = "用户列表",tags = "用户")
@PostMapping(value = "/users_list")
public ResultVo usersList(@RequestBody Users params){
Page<Users> usersPages = usersService.getUsersPages(params);
}
如果传来的参数是这样的:
{params: {username: “adm”, pageNo: 1, pageSize: 2}}
不能直接转为User对象,需要用jsonString来接收,然后将jsonStr转为jsonObj,获取jsonObj中的params对应的userJsonObj,再把userJsonObj转为实体类。
@ApiOperation(value = "用户列表",tags = "用户")
@PostMapping(value = "/users_list")
public ResultVo usersList(@RequestBody String jsonStr){
JSONObject jsonObj = JSONObject.parseObject(jsonStr);
JSONObject userJsonObj = (JSONObject)jsonObj.get("params");
Users users = JSON.toJavaObject(userJsonObj, Users.class);
}
参数是个对象:可以只传一个属性
参数是个Map
public OperResult saveAdminUser(@RequestBody Map<String, Object> map) {
return tUserService.saveAdmin(map);
}
断点看map结构:
浏览器中看传参:
Restful风格传参
@ApiOperation(value = "根据id删除用户",tags = "用户")
@PostMapping("/del/{id}")
public ResultVo delUserById(@PathVariable(name = "id") String id){
Integer rows = usersService.delUserById(id);
return new ResultVo(rows,Meta.success());
}