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 注解时的测试效果
没加注解 @RequestBody 时的测试效果 加上注解 @RequestBody 时的测试效果
日期类型参数的处理
由于前后台分离,在处理日期类型的参数时,传时间戳就好,具体的显示由前后台各自决定
如:String content = "{\"username\":\"tom\",\"password\":null,\"birthday\":"+date.getTime()+"}";
中的birthday传的值为date.getTime()
@valid注解和BindingResult验证请求参数的合法性并处理校验结果
设置password为非空 在调用 create 方法的时候要进行校验上图的这种做法,如果不满足条件(password非空),方法直接不执行了
而有时候我们需要对某些情况进行处理,比如密码没填写,要记录下来,这种做法显然实现不了,这时候就需要BindingResult了
使用 BindingResult
使用 BindingResult 后的测试效果
也就是说,加了BindingResult,create方法带着错误信息进入到了方法,这个时候就可以进行相应的处理了
网友评论