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

本文共 7359 字,大约阅读时间需要 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     }

  控制台

  

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

 

转载地址:http://ioghl.baihongyu.com/

你可能感兴趣的文章
Tap-Ahead:让移动搜索更加便捷的解决之道
查看>>
Windows Server2016 Hyper-v Cluster部署
查看>>
juniper路由器配置
查看>>
jQuery一点一滴系列教程(第三点)
查看>>
ARP解决方法/工具 真假ARP防范区别方法 ARP终极解决方案
查看>>
系统数据权限的实现方案
查看>>
华为vlan划分,单臂路由以及静态路由
查看>>
UCD 2010百度工作坊
查看>>
ssh2免密码登录
查看>>
4_move_find_into_model
查看>>
MySQL · 捉虫动态 · UK 包含 NULL 值备库延迟分析
查看>>
windows server 2012 standard Evaluation 安装试用
查看>>
windows server 2008中配置TCP/IP
查看>>
网管必读:交换机技术简介及应用分析
查看>>
.NET多线程编程(9)——Thread类
查看>>
HP DL380G6上安装配置Vmware_ESXI4.1
查看>>
单IP无TMG拓扑Lync Server 2013:活动目录
查看>>
3.VMware vsphere 5.0新体验-安装VMware Center
查看>>
趣题: 一道面试题的解法
查看>>
Java Scoket之java.io.EOFException解决方案
查看>>