一:主要任务
1.说明
@RequestBody 映射请求体到java方法的参数
日期类型参数的处理
@Valid注解
BindingResult验证请求参数的合法性并处理校验结果
二:@RequestBody
1.@RequestBody
测试类
1 /** 2 * @throws Exception 3 * 4 */ 5 @Test 6 public void whenCreateSuccess() throws Exception { 7 String content="{\"username\":\"tom\",\"password\":null}"; 8 mockMvc.perform(MockMvcRequestBuilders.post("/user") 9 .contentType(MediaType.APPLICATION_JSON_UTF8)10 .content(content))11 .andExpect(MockMvcResultMatchers.status().isOk())12 .andExpect(MockMvcResultMatchers.jsonPath("$.id").value("1"));13 }
User.java
1 package com.cao.dto; 2 3 import com.fasterxml.jackson.annotation.JsonView; 4 5 public class User { 6 //接口 7 public interface UserSimpleView {}; 8 public interface UserDetailView extends UserSimpleView {}; //继承之后,可以展示父的所有 9 10 private String username;11 private String password;12 private String id;13 14 @JsonView(UserSimpleView.class)15 public String getUsername() {16 return username;17 }18 public void setUsername(String username) {19 this.username = username;20 }21 22 @JsonView(UserDetailView.class)23 public String getPassword() {24 return password;25 }26 public void setPassword(String password) {27 this.password = password;28 }29 30 @JsonView(UserSimpleView.class)31 public String getId() {32 return id;33 }34 public void setId(String id) {35 this.id = id;36 }37 38 }
控制类
1 @JsonView(User.UserDetailView.class) 2 @PostMapping 3 public User create(@RequestBody User user){ 4 System.out.println(user.getId()); 5 System.out.println(user.getUsername()); 6 System.out.println(user.getPassword()); 7 8 user.setId("1"); 9 return user;10 }
三:日期类型的处理
1.说明
使用时间戳。
2.程序
User中添加Date类型字段
1 package com.cao.dto; 2 3 import java.util.Date; 4 5 import com.fasterxml.jackson.annotation.JsonView; 6 7 public class User { 8 //接口 9 public interface UserSimpleView {};10 public interface UserDetailView extends UserSimpleView {}; //继承之后,可以展示父的所有11 12 private String username;13 private String password;14 private String id;15 private Date birthday;16 17 @JsonView(UserSimpleView.class)18 public String getUsername() {19 return username;20 }21 public void setUsername(String username) {22 this.username = username;23 }24 25 @JsonView(UserDetailView.class)26 public String getPassword() {27 return password;28 }29 public void setPassword(String password) {30 this.password = password;31 }32 33 @JsonView(UserSimpleView.class)34 public String getId() {35 return id;36 }37 public void setId(String id) {38 this.id = id;39 }40 41 @JsonView(UserSimpleView.class)42 public Date getBirthday() {43 return birthday;44 }45 public void setBirthday(Date birthday) {46 this.birthday = birthday;47 }48 49 }
测试类
1 /** 2 * @throws Exception 3 * 测试请求的创建 4 */ 5 @Test 6 public void whenCreateSuccess() throws Exception { 7 Date date=new Date(); 8 System.out.println(date.getTime()); 9 String content="{\"username\":\"tom\",\"password\":null,\"birthday\":"+date.getTime()+"}";10 String result=mockMvc.perform(MockMvcRequestBuilders.post("/user")11 .contentType(MediaType.APPLICATION_JSON_UTF8)12 .content(content))13 .andExpect(MockMvcResultMatchers.status().isOk())14 .andExpect(MockMvcResultMatchers.jsonPath("$.id").value("1"))15 .andReturn().getResponse().getContentAsString();16 System.out.println("result="+result);17 }
控制类
1 @PostMapping 2 public User create(@RequestBody User user){ 3 System.out.println(user.getId()); 4 System.out.println(user.getUsername()); 5 System.out.println(user.getPassword()); 6 System.out.println(user.getBirthday()); 7 8 user.setId("1"); 9 return user;10 }
效果:
四:@Valid
1.说明
只有满足校验的时候,才进行业务处理
2.校验的步骤
对字段进行校验要求
在服务上加@Valid
3.程序
User.java
1 package com.cao.dto; 2 3 import java.util.Date; 4 5 import org.hibernate.validator.constraints.NotBlank; 6 7 import com.fasterxml.jackson.annotation.JsonView; 8 9 public class User {10 //接口11 public interface UserSimpleView {};12 public interface UserDetailView extends UserSimpleView {}; //继承之后,可以展示父的所有13 14 private String username;15 16 @NotBlank17 private String password;18 private String id;19 private Date birthday;20 21 @JsonView(UserSimpleView.class)22 public String getUsername() {23 return username;24 }25 public void setUsername(String username) {26 this.username = username;27 }28 29 @JsonView(UserDetailView.class)30 public String getPassword() {31 return password;32 }33 public void setPassword(String password) {34 this.password = password;35 }36 37 @JsonView(UserSimpleView.class)38 public String getId() {39 return id;40 }41 public void setId(String id) {42 this.id = id;43 }44 45 @JsonView(UserSimpleView.class)46 public Date getBirthday() {47 return birthday;48 }49 public void setBirthday(Date birthday) {50 this.birthday = birthday;51 }52 53 }
控制类
1 @PostMapping 2 public User create(@Valid @RequestBody User user){ 3 System.out.println(user.getId()); 4 System.out.println(user.getUsername()); 5 System.out.println(user.getPassword()); 6 System.out.println(user.getBirthday()); 7 8 user.setId("1"); 9 return user;10 }
测试类
1 /** 2 * @throws Exception 3 * 测试请求的创建 4 */ 5 @Test 6 public void whenCreateSuccess() throws Exception { 7 Date date=new Date(); 8 System.out.println(date.getTime()); 9 String content="{\"username\":\"tom\",\"password\":null,\"birthday\":"+date.getTime()+"}";10 String result=mockMvc.perform(MockMvcRequestBuilders.post("/user")11 .contentType(MediaType.APPLICATION_JSON_UTF8)12 .content(content))13 .andExpect(MockMvcResultMatchers.status().isOk())14 .andExpect(MockMvcResultMatchers.jsonPath("$.id").value("1"))15 .andReturn().getResponse().getContentAsString();16 System.out.println("result="+result);17 }
4.效果
5.BindingResult
在上面的程序中,校验没有通过,则请求不进入方法体,但是有时候还需要一些处理的
6.程序
控制类
1 @PostMapping 2 public User create(@Valid @RequestBody User user,BindingResult errors){ 3 if(errors.hasErrors()) { 4 errors.getAllErrors().stream().forEach(error->System.out.println(error.getDefaultMessage())); 5 } 6 7 System.out.println(user.getId()); 8 System.out.println(user.getUsername()); 9 System.out.println(user.getPassword());10 System.out.println(user.getBirthday());11 12 user.setId("1");13 return user;14 }
控制台
这里暂时都打印出来,个性化还需要在后面处理。