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() 为空时的messagemap.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());
}