3 回答
TA贡献1802条经验 获得超5个赞
您还可以使用 JsonView Annotation 使其更清洁。定义视图
public class View {
static class Public { }
static class ExtendedPublic extends Public { }
static class Private extends ExtendedPublic { }
}
实体
@Entity
@Table("entities)
public class MyEntity {
@ID
private String name;
@Column(name="age")
private int age;
@JsonView(View.Private.class)
@Column(name="weight")
private int weight;
...getters and setters..
}
在你的休息控制器中
@JsonView(View.Private.class)
@GetMapping
public MyEntity get(){
...
return myEntity;
}
@JsonView(View.Public.class)
@GetMapping("url")
public List<MyEntity> getAll(){
...
return entities;
}
TA贡献1776条经验 获得超12个赞
编辑:
您可以将其序列化为 Map,而不是返回 Entity 对象,其中映射键表示属性名称。因此,您可以根据包含参数将值添加到地图中。
@ResponseBody
public Map<String, Object> getUser(@PathVariable("name") String name, String include) {
User user = service.loadUser(name);
// check the `include` parameter and create a map containing only the required attributes
Map<String, Object> userMap = service.convertUserToMap(user, include);
return userMap;
}
例如,如果您有这样的地图并且想要所有详细信息
userMap.put("name", user.getName());
userMap.put("age", user.getAge());
userMap.put("weight", user.getWeight());
现在如果你不想显示重量,那么你可以只放两个参数
userMap.put("name", user.getName());
userMap.put("age", user.getAge());
TA贡献1856条经验 获得超5个赞
您可以创建两个 DTO 类,将您的实体转换为适当的 DTO 类并返回它。
public class MyEntity {
private String name;
private int age;
private int weight;
public PersonDetailedDTO toPersonDetailedDTO() {
PersonDetailedDTO person = PersonDetailedDTO();
//...
return person;
}
public PersonDTO toPersonDTO() {
PersonDTO person = PersonDTO();
//...
return person;
}
}
public class PersonDetailedDTO {
private String name;
private int age;
private int weight;
}
public class PersonDTO {
private String name;
private int age;
}
@GetMapping
public PersonDTO get() {
//...
return personService.getPerson().toPersonDTO();
}
添加回答
举报