我们应用程序的 Web 服务层从内部业务对象创建 JSON。
有些属性是完全隐藏的,这很容易
public class User {
@JsonIgnore
public String getHash() {
return hash;
}
// lot more getters and setters
}
由于性能原因,我认为并不总是提供完整的用户(任何其他)对象。
因此,当使用 /rest/users 时,它应该只为每个用户提供一部分属性。
使用 /rest/user/{id} 时,它将提供所有
这也可以通过将用户对象包装到不同的模型中来或多或少地实现,这些模型的吸气剂比用户少。
public class PublicUserModel {
private User user;
public PublicUserModel(User user) {
this.user = user;
}
public String getFirstname() {
return user.getFirstname();
}
public String getLastname() {
return user.getLastname();
}
}
但这需要大量编码,并且对于不同的视图不是很灵活。
理想情况下,有一种方法可以告诉@Controller 哪些属性应该可用。所有其他代码都需要大量工作。
@Controller
public class MainController {
@Autowired
private UserService userService;
@ResponseBody
@RequestMapping(value = "/users/{id}")
public MyUserModel getUser(@PathVariable String id) {
User user = userService.getUser(id);
if (user != null) {
return new MyUserModel(user);
}
return null;
}
@ResponseBody
@RequestMapping(value = "/users")
public Collection<PublicUserModel> getUsers() {
Collection<User> users = userService.getAllUsers();
Collection<PublicUserModel> publicUsers = new ArrayList<>();
for (User user : users) {
publicUsers.add(new PublicUserModel(user));
}
return publicUsers;
}
}
对通用模型有什么想法吗?