预先,我不是说Content Negotiation
。假设我有一个简单的JPA实体,通过它可以与相关DTO转换的方式无关紧要。
@Entity
public class User {
...
private String email;
private String password;
...
}
我有一个RESTful控制器,它具有两种不同的路由,即安全路由和公共路由。
@RestController
public class UserController {
...
@GetMapping("/public")
private User publicRoute() {
return service.getLatestUser();
}
@Secured("...")
@GetMapping("/private")
private User privateRoute() {
return service.getLatestUser();
}
}
对于这两种路线,返回的都是相同的实体,但在第一种情况下,是公开表示,例如对于用户个人资料,没有诸如电子邮件和密码应该返回。但是,在第二种情况下,需要所有者的私人代表。
有什么优雅的方法吗?我使用@JsonIgnore
在JSON级别上尝试了它,但对我来说不起作用。我也尝试使用Response
-Objects,但这会导致很多样板代码!有什么建议吗?
另请参见: 由Ananthapadmanabhan推荐,已经有一些关于此主题的问题/资源:
答案 0 :(得分:2)
从两个终结点返回不同的DTO对象,而不是返回相同的Entity类,这样您就可以控制响应中应该包含哪些属性。
阅读here,了解使用DTO的优点。
答案 1 :(得分:0)
如果您的对象不是最终对象,则可以编写自己的方法 私有用户ignoreEmailAndPass(用户用户){User usr = new User(); usr.setName(); //仅发送必填字段。}
答案 2 :(得分:0)
来自问题:
告诉我您对此解决方案有何看法?