一:主要任务
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 @NotBlank 17 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 }
控制台
这里暂时都打印出来,个性化还需要在后面处理。