一:主要任务

1.说明

  @RequestBody 映射请求体到java方法的参数

  日期类型参数的处理

  @Valid注解

  BindingResult验证请求参数的合法性并处理校验结果

二:@RequestBody

1.@RequestBody

  测试类

 /**
* @throws Exception
*
*/
@Test
public void whenCreateSuccess() throws Exception {
String content="{\"username\":\"tom\",\"password\":null}";
mockMvc.perform(MockMvcRequestBuilders.post("/user")
.contentType(MediaType.APPLICATION_JSON_UTF8)
.content(content))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.id").value("1"));
}

  User.java

 package com.cao.dto;

 import com.fasterxml.jackson.annotation.JsonView;

 public class User {
//接口
public interface UserSimpleView {};
public interface UserDetailView extends UserSimpleView {}; //继承之后,可以展示父的所有 private String username;
private String password;
private String id; @JsonView(UserSimpleView.class)
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
} @JsonView(UserDetailView.class)
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
} @JsonView(UserSimpleView.class)
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
} }

  控制类

     @JsonView(User.UserDetailView.class)
@PostMapping
public User create(@RequestBody User user){
System.out.println(user.getId());
System.out.println(user.getUsername());
System.out.println(user.getPassword()); user.setId("1");
return user;
}

三:日期类型的处理

1.说明

  使用时间戳。

2.程序

  User中添加Date类型字段

 package com.cao.dto;

 import java.util.Date;

 import com.fasterxml.jackson.annotation.JsonView;

 public class User {
//接口
public interface UserSimpleView {};
public interface UserDetailView extends UserSimpleView {}; //继承之后,可以展示父的所有 private String username;
private String password;
private String id;
private Date birthday; @JsonView(UserSimpleView.class)
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
} @JsonView(UserDetailView.class)
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
} @JsonView(UserSimpleView.class)
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
} @JsonView(UserSimpleView.class)
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
} }

  测试类

     /**
* @throws Exception
* 测试请求的创建
*/
@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 result=mockMvc.perform(MockMvcRequestBuilders.post("/user")
.contentType(MediaType.APPLICATION_JSON_UTF8)
.content(content))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.id").value("1"))
.andReturn().getResponse().getContentAsString();
System.out.println("result="+result);
}

  控制类

 @PostMapping
public User create(@RequestBody User user){
System.out.println(user.getId());
System.out.println(user.getUsername());
System.out.println(user.getPassword());
System.out.println(user.getBirthday()); user.setId("1");
return user;
}

  效果:

  005 使用SpringMVC开发restful API三--处理创建请求-LMLPHP

四:@Valid

1.说明

  只有满足校验的时候,才进行业务处理

2.校验的步骤

  对字段进行校验要求

  在服务上加@Valid

3.程序

  User.java

 package com.cao.dto;

 import java.util.Date;

 import org.hibernate.validator.constraints.NotBlank;

 import com.fasterxml.jackson.annotation.JsonView;

 public class User {
//接口
public interface UserSimpleView {};
public interface UserDetailView extends UserSimpleView {}; //继承之后,可以展示父的所有 private String username; @NotBlank
private String password;
private String id;
private Date birthday; @JsonView(UserSimpleView.class)
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
} @JsonView(UserDetailView.class)
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
} @JsonView(UserSimpleView.class)
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
} @JsonView(UserSimpleView.class)
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
} }

  控制类

 @PostMapping
public User create(@Valid @RequestBody User user){
System.out.println(user.getId());
System.out.println(user.getUsername());
System.out.println(user.getPassword());
System.out.println(user.getBirthday()); user.setId("1");
return user;
}

  测试类

 /**
* @throws Exception
* 测试请求的创建
*/
@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 result=mockMvc.perform(MockMvcRequestBuilders.post("/user")
.contentType(MediaType.APPLICATION_JSON_UTF8)
.content(content))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.id").value("1"))
.andReturn().getResponse().getContentAsString();
System.out.println("result="+result);
}

4.效果

  005 使用SpringMVC开发restful API三--处理创建请求-LMLPHP

5.BindingResult

  在上面的程序中,校验没有通过,则请求不进入方法体,但是有时候还需要一些处理的

6.程序

  控制类

 @PostMapping
public User create(@Valid @RequestBody User user,BindingResult errors){
if(errors.hasErrors()) {
errors.getAllErrors().stream().forEach(error->System.out.println(error.getDefaultMessage()));
} System.out.println(user.getId());
System.out.println(user.getUsername());
System.out.println(user.getPassword());
System.out.println(user.getBirthday()); user.setId("1");
return user;
}

  控制台

  005 使用SpringMVC开发restful API三--处理创建请求-LMLPHP

  这里暂时都打印出来,个性化还需要在后面处理。

05-11 10:54
查看更多