@PathVariable、@JsonView的使用
@GetMapping(value = "/user/{id://d+}")
public User getInfo(@PathVariable(name = "id") String idxxx){} // @PathVariable注解获取URL中{}片段值放到方法参数中
@JsonView 使用步骤(作用:在返回相同对象时候,控制在某一个视图返回的字段,在另一个视图返回的字段)
1.在实体类中使用接口声明多个视图
2.在值对象的getter方法上使用@JsonView()指定视图
3.在Controller接口方法上指定视图
import com.fasterxml.jackson.annotation.JsonView;
public class User {
// 定义两个视图
public interface UserSimpleView{} // 简单视图(展示用户名)
public interface UserDetailView extends UserSimpleView{} // 详情视图(展示用户名和密码)
private String username;
private String password;
public User() {
}
public User(String username, String password) {
this.username = username;
this.password = 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;
}
}
@RestController
public class UserController {
@GetMapping(value = "/user")
@JsonView(User.UserSimpleView.class)
public List<User> query(UserQueryCondition userQueryCondition, @PageableDefault(page = 1,size = 5,sort = "DESC") Pageable pageable){
System.err.println(userQueryCondition);
System.err.println(pageable);
List<User> users = new ArrayList<>();
users.add(new User("zhangsan","123"));
users.add(new User("lisi","123"));
users.add(new User("wangwu","123"));
return users;
}
@GetMapping(value = "/user/{id:\\d+}") // :\\d+ 正则表达式 标识id为数字
@JsonView(User.UserDetailView.class)
public User getInfo(@PathVariable(name = "id") String idxxx){
System.err.println(idxxx);
User user = new User();
user.setUsername("tom");
user.setPassword("123");
return user;
}
}
两个接口方法的执行获取数据分别为:
[{"username":"zhangsan"},{"username":"lisi"},{"username":"wangwu"}]
{"username":"tom","password":"123"}
@PathVariable 作用:可以将URL中占位符参数{xxx}绑定到处理器类的方法形参中
@JsonView 作用:在返回相同对象时候,控制在某一个视图返回的字段,在另一个视图返回的字段