@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;
@Test
public void whenGetInfoSuccess(){
// url代表资源,方法代表查询做出的操作 状态码获取状态
mockMvc.perform(get("/user/1")
.contentType(MediaType.APPLICATION_JSON_UTF8))
.andExpect(status().isOk)
.andExcept(jsonPath($.username).value("tom"));
}
@Test
public 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(){}