简介
当我们使用SpringMVC做controller进行查询信息,以Json的数据格式返回前端时,对于同一个实体类,不同的接口要求返回不同的字段。例如:对于User类,/getDetail
接口需要返回所有的字段,而getSimple
则只需要用户名、手机号、邮箱等信息。为了解决这个Json数据的控制问题,我们可以使用JsonView注解进行开发。
但我们也可以不使用JsonView,针对不同的接口,我们自己定义不同VO类(只定义接口需要返回的字段),也可以解决这个问题。
JsonView使用步骤
在bean中的定义视图
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class User implements Serializable {
private static final long serialVersionUID = -8441401775719174836L;
public interface UserSimpleView {}
public interface UserDetailView extends UserSimpleView {}
@JsonView(UserSimpleView.class)
private String userName;
@JsonView(UserDetailView.class)
private String password;
}
在controller中的需要返回的视图
@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {
@GetMapping(value = {"","/"})
@JsonView(User.UserSimpleView.class)
public List<User> query(@RequestParam(value = "userName", required = false, defaultValue = "default")String userName){
log.info("参数[{}]", userName);
ArrayList<User> userList = Lists.newArrayList();
userList.add(User.builder().userName("aaa").password("aaa").build());
userList.add(User.builder().userName("bbb").password("bbb").build());
userList.add(User.builder().userName("ccc").password("ccc").build());
return userList;
}
@GetMapping("/{id}")
@JsonView(User.UserDetailView.class)
public User getById(@PathVariable(value = "id")String id){
return User.builder().userName("tom").password("tom&jerry").build();
}
}