个人技术分享

Controller层一定要try catch一下,不然里面报的错可能导致程序报错。

catch中就表示有错误就 Return ResultUtils.err(e.getMessage())

必填项校验

  1. 在实体属性中添加注解
    @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;
  1. 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());
}