使用SpringMvc 开发 RESTful API 用户详情请求、JsonView注解使用(二)

来源:互联网 发布:在ipad上开淘宝店 编辑:程序博客网 时间:2024/06/05 03:57

@PathVariable 映射url片段到java方法的参数
在url声明中使用正则表达式
@JsonView控制json输出内容

1.获取用户详情

测试用例

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;@Testpublic void whenGetInfoSuccess(){// url代表资源,方法代表查询做出的操作 状态码获取状态mockMvc.perform(get("/user/1")                .contentType(MediaType.APPLICATION_JSON_UTF8))                .andExpect(status().isOk)                .andExcept(jsonPath($.username).value("tom"));}@Testpublic whenGetInfoFalil(){ mockMvc.perform(get("/user/a"))             .contentType(MediaType.APPLICATION_JSON_UTF8)             .andExcept(status().is4xxClientError()); }

Controller

    @GetMapping("/{id:\\d+}")    public User getInfo(@PathVariable(value = "id") String id) {        User user = new User();        user.setUsername("tom");        user.setPassword("123456");        return user;    }

2.@JsonView 注解的使用

什么样的场景下适用于JonView注解?
比如下面这两个方法

// 返回一组信息public List<User> query(){}   // 返回单个用户的信息public User getInfo(){}   

在这个用户的对对象里面包含 两个字段 一个是username 一个是password
假设在查询的时候不把用户的密码返回过去,而在返回单个用户信息的时候把密码这个字段返回

JsonView使用步骤
使用接口来声明多个视图
在值对象的get方法上指定视图
在Controller方法上指定视图

/** * 用户实体类 * @author ZhuPengWei */public class User {   // 用户的简单视图   public interface UserSimpleView {};   // 用户的复杂视图   public interface UserDetailView extends UserSimpleView {};   private String username;   private String password;   @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;  }}
// 返回一组用户信息@RequestMapping(value= "/user",method= RequestMethod.GET)@JsonView(User.UserSimpleView.class )public List<User> query(){}   
// 返回单个用户的信息@RequestMapping(value= "/user/{id : \\d+}",method= RequestMethod.GET)@JsonView(User.UserDetailView.class )public User getInfo(){}  
原创粉丝点击