博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
004 使用SpringMVC开发restful API二--编写用户详情
阅读量:7092 次
发布时间:2019-06-28

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

一:编写用户详情服务

1.任务

  @PathVariable隐射url片段到java方法的参数

  在url声明中使用正则表达式

  @JsonView控制json输出内容

 

二:@PathVariable

1.@PathVariable小测试

  测试类

1 @Test2     public void whenGetInfoSuccess() throws Exception {3         //发送请求4         mockMvc.perform(MockMvcRequestBuilders.get("/user/1")5                 .contentType(MediaType.APPLICATION_JSON_UTF8))6             .andExpect(MockMvcResultMatchers.status().isOk())7             .andExpect(MockMvcResultMatchers.jsonPath("$.username").value("tom"));8     }

  控制类

1 @RequestMapping(value="/user/{id}",method=RequestMethod.GET)2     public User getInfo(@PathVariable(value="idid") String idid){3         System.out.println("id="+idid);4         User user=new User();5         user.setUsername("tom");6         return user;7     }

 

2.效果

  

 

三:url声明中的正则表达式

1.测试

  测试类

1 /** 2      * 测试url声明的正则表达式 3      * @throws Exception 4      */ 5     @Test 6     public void whenGetInfoFail() throws Exception { 7         //发送请求 8         mockMvc.perform(MockMvcRequestBuilders.get("/user/aa") 9                 .contentType(MediaType.APPLICATION_JSON_UTF8))10             .andExpect(MockMvcResultMatchers.status().is4xxClientError());11     }

  控制类

    只许传递的id为数字。

1 @RequestMapping(value="/user/{id:\\d+}",method=RequestMethod.GET)2     public User getInfo(@PathVariable(value="idid") String idid){3         System.out.println("id="+idid);4         User user=new User();5         user.setUsername("tom");6         return user;7     }

 

四:@JsonView

1.说明

  以过滤序列化对象的字段属性,可以使你有选择的序列化对象

 

2.使用步骤

  使用接口来声明多个视图

  在值对象的get方法上指定视图

  在controller方法上指定视图

 

3.按照步骤实现一个场景

  

 

4.程序

  完成前两步

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     13     @JsonView(UserSimpleView.class)14     public String getUsername() {15         return username;16     }17     public void setUsername(String username) {18         this.username = username;19     }20     21     @JsonView(UserDetailView.class)22     public String getPassword() {23         return password;24     }25     public void setPassword(String password) {26         this.password = password;27     }28     29 }

  完成第三步

1 package com.cao.web.controller; 2  3 import static org.mockito.Matchers.contains; 4  5 import java.util.ArrayList; 6 import java.util.List; 7  8 import org.apache.commons.lang.builder.ReflectionToStringBuilder; 9 import org.apache.commons.lang.builder.ToStringStyle;10 import org.springframework.data.domain.Pageable;11 import org.springframework.data.web.PageableDefault;12 import org.springframework.web.bind.annotation.PathVariable;13 import org.springframework.web.bind.annotation.RequestMapping;14 import org.springframework.web.bind.annotation.RequestMethod;15 import org.springframework.web.bind.annotation.RequestParam;16 import org.springframework.web.bind.annotation.RestController;17 18 import com.cao.dto.User;19 import com.cao.dto.UserQueryCondition;20 import com.fasterxml.jackson.annotation.JsonView;21 22 //此controller可以提供restful服务23 @RestController24 public class UserController {25     @RequestMapping(value="/user",method=RequestMethod.GET)26     @JsonView(User.UserSimpleView.class)27     public List
query(UserQueryCondition condition,@PageableDefault(size=13) Pageable pageable){28 //反射的方法来打印29 System.out.println(ReflectionToStringBuilder.toString(condition, ToStringStyle.MULTI_LINE_STYLE));30 //31 System.out.println(pageable.getPageSize());32 System.out.println(pageable.getPageNumber());33 System.out.println(pageable.getSort());34 //35 List
userList=new ArrayList<>();36 userList.add(new User());37 userList.add(new User());38 userList.add(new User());39 return userList;40 }41 42 @RequestMapping(value="/user/{id:\\d+}",method=RequestMethod.GET)43 @JsonView(User.UserDetailView.class)44 public User getInfo(@PathVariable(value="id") String idid){45 System.out.println("id="+idid);46 User user=new User();47 user.setUsername("tom");48 return user;49 }50 51 }

  测试类一:

1 /* 2      * 测试几个常见的声明 3      */ 4     @Test 5     public void whenQuerySuccess() throws Exception { 6         //发送请求 7         String result=mockMvc.perform(MockMvcRequestBuilders.get("/user") 8                 .param("username", "Job") 9                 .param("age", "18")10                 .param("xxx", "XXX")11                 //分页,查第三页,每页15条,按照age降序12 //                    .param("page", "3")13 //                    .param("size", "15")14 //                    .param("sort", "age,desc")15                 //16                 .contentType(MediaType.APPLICATION_JSON_UTF8))17             .andExpect(MockMvcResultMatchers.status().isOk())18             .andExpect(MockMvcResultMatchers.jsonPath("$.length()").value(3))19             .andReturn().getResponse().getContentAsString();20         System.out.println("result="+result);21     }

  效果

  

 

  测试类二

1 /** 2      * 测试pathVariable 3      * @throws Exception 4      */ 5     @Test 6     public void whenGetInfoSuccess() throws Exception { 7         //发送请求 8         String result=mockMvc.perform(MockMvcRequestBuilders.get("/user/1") 9                 .contentType(MediaType.APPLICATION_JSON_UTF8))10             .andExpect(MockMvcResultMatchers.status().isOk())11             .andExpect(MockMvcResultMatchers.jsonPath("$.username").value("tom"))12             .andReturn().getResponse().getContentAsString();13         System.out.println("result="+result);14     }

  效果

  

 

五:重构代码

1.重构服务

  @RequestMapping("/user")

  @GetMapping

1 package com.cao.web.controller; 2  3 import static org.mockito.Matchers.contains; 4  5 import java.util.ArrayList; 6 import java.util.List; 7  8 import org.apache.commons.lang.builder.ReflectionToStringBuilder; 9 import org.apache.commons.lang.builder.ToStringStyle;10 import org.springframework.data.domain.Pageable;11 import org.springframework.data.web.PageableDefault;12 import org.springframework.web.bind.annotation.GetMapping;13 import org.springframework.web.bind.annotation.PathVariable;14 import org.springframework.web.bind.annotation.RequestMapping;15 import org.springframework.web.bind.annotation.RequestMethod;16 import org.springframework.web.bind.annotation.RequestParam;17 import org.springframework.web.bind.annotation.RestController;18 19 import com.cao.dto.User;20 import com.cao.dto.UserQueryCondition;21 import com.fasterxml.jackson.annotation.JsonView;22 23 //此controller可以提供restful服务24 @RestController25 @RequestMapping("/user")26 public class UserController {27 //    @RequestMapping(value="/user",method=RequestMethod.GET)28     @JsonView(User.UserSimpleView.class)29     @GetMapping30     public List
query(UserQueryCondition condition,@PageableDefault(size=13) Pageable pageable){31 //反射的方法来打印32 System.out.println(ReflectionToStringBuilder.toString(condition, ToStringStyle.MULTI_LINE_STYLE));33 //34 System.out.println(pageable.getPageSize());35 System.out.println(pageable.getPageNumber());36 System.out.println(pageable.getSort());37 //38 List
userList=new ArrayList<>();39 userList.add(new User());40 userList.add(new User());41 userList.add(new User());42 return userList;43 }44 45 // @RequestMapping(value="/user/{id:\\d+}",method=RequestMethod.GET)46 @JsonView(User.UserDetailView.class)47 @GetMapping(value="/{id:\\d+}")48 public User getInfo(@PathVariable(value="id") String idid){49 System.out.println("id="+idid);50 User user=new User();51 user.setUsername("tom");52 return user;53 }54 55 }

 

2.重新跑测试类

  这里主要是验证重构代码后的正确性。

 

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

你可能感兴趣的文章
EXTJS学习系列提高篇:第十一篇(转载)作者殷良胜,制作树形菜单之五
查看>>
从代码分析Android-Universal-Image-Loader的图片加载、显示流程
查看>>
阿里妈妈首次公开新一代自研智能检索模型 | WWW 2018论文解读
查看>>
使用Depth Texture
查看>>
第 9 章 PBX
查看>>
ylbtech-LanguageSamples-Porperties(属性)
查看>>
第 4 章 Music score
查看>>
架构设计目录
查看>>
Wind7外接显示器选择拓展模式后,鼠标只能往右移动才能切换到外接显示器上,不能修改切换方向...
查看>>
学习笔记: CSS3 鼠标悬停动画
查看>>
ylbtech-cnblogs(博客园)-数据库设计-7,News(新闻)
查看>>
WCF 基础简介
查看>>
用Soap消息调用Web Services(续)
查看>>
php数据库操作封装类
查看>>
atitit.导出excel的设计----查询结果 导出为excel的实现java .net php 总结
查看>>
[LeetCode] Partition List 划分链表
查看>>
以Ajax方式显示Lotus Notes视图的javasript类库----NotesView2
查看>>
ylbtech-memorandum(备忘录)-数据库设计
查看>>
spm中头动绘图的理解,自带数据集
查看>>
车辆管理系统之继续自己的任务(五)
查看>>