3-4用户创建请求

requestBody 映射请求体到Java方法的参数

测试用例

@Test
public void whenCreateSuccess() throws Exception {
    Date date = new Date();
    System.out.println(date.getTime());
    String content = "{\"username\":\"tom\",\"password\":null,\"birthday\":"+date.getTime()+"}";
    String reuslt = mockMvc.perform(post("/user").contentType(MediaType.APPLICATION_JSON_UTF8)
            .content(content))
            .andExpect(status().isOk())
            .andExpect(jsonPath("$.id").value("1"))
            .andReturn().getResponse().getContentAsString();
    System.out.println(reuslt);
}

UserController的 create 方法

@PostMapping("/user")
public User create(@RequestBody User user){
    user.setId("1");
    return user;
}

没加 @requestBody 注解时的测试效果


3-4用户创建请求_第1张图片
没加注解 @RequestBody 时的测试效果
3-4用户创建请求_第2张图片
加上注解 @RequestBody 时的测试效果

日期类型参数的处理

由于前后台分离,在处理日期类型的参数时,传时间戳就好,具体的显示由前后台各自决定
如:String content = "{\"username\":\"tom\",\"password\":null,\"birthday\":"+date.getTime()+"}";中的birthday传的值为date.getTime()

@valid注解和BindingResult验证请求参数的合法性并处理校验结果

3-4用户创建请求_第3张图片
设置password为非空
3-4用户创建请求_第4张图片
在调用 create 方法的时候要进行校验

上图的这种做法,如果不满足条件(password非空),方法直接不执行了
而有时候我们需要对某些情况进行处理,比如密码没填写,要记录下来,这种做法显然实现不了,这时候就需要BindingResult了


3-4用户创建请求_第5张图片
使用 BindingResult

3-4用户创建请求_第6张图片
使用 BindingResult 后的测试效果

也就是说,加了BindingResult,create方法带着错误信息进入到了方法,这个时候就可以进行相应的处理了

你可能感兴趣的:(3-4用户创建请求)