博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
005 使用SpringMVC开发restful API三--处理创建请求
阅读量:5161 次
发布时间:2019-06-13

本文共 7411 字,大约阅读时间需要 24 分钟。

一:主要任务

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     }

  控制台

  

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

 

转载于:https://www.cnblogs.com/juncaoit/p/9704247.html

你可能感兴趣的文章
投标项目的脚本练习2
查看>>
201521123107 《Java程序设计》第9周学习总结
查看>>
Caroline--chochukmo
查看>>
iOS之文本属性Attributes的使用
查看>>
从.Net版本演变看String和StringBuilder性能之争
查看>>
Excel操作 Microsoft.Office.Interop.Excel.dll的使用
查看>>
解决Ubuntu下博通网卡驱动问题
查看>>
【bzoj2788】Festival
查看>>
执行gem install dryrun错误
查看>>
HTML5简单入门系列(四)
查看>>
实现字符串反转
查看>>
转载:《TypeScript 中文入门教程》 5、命名空间和模块
查看>>
苹果开发中常用英语单词
查看>>
[USACO 1.4.3]等差数列
查看>>
Shader Overview
查看>>
Reveal 配置与使用
查看>>
Java中反射的学习与理解(一)
查看>>
C语言初学 俩数相除问题
查看>>
B/S和C/S架构的区别
查看>>
[Java] Java record
查看>>