我有 MyEntity 类:
@Entity
@Table("entities)
public class MyEntity {
@ID
private String name;
@Column(name="age")
private int age;
@Column(name="weight")
private int weight;
...getters and setters..
}
在 @RestController 中,有2个 @GetMapping 方法。 第一个:
@GetMapping
public MyEntity get(){
...
return myEntity;
}
第二个:
@GetMapping("url")
public List<MyEntity> getAll(){
...
return entities;
}
需要提供:
1. @GetMapping 返回 MyEntity类中所述的实体。
2. @GetMapping(“ url”)返回 like 之类的实体,其中一个字段是 @JsonIgnore 。
更新:
当我返回myEntity时,客户端将得到例如:
{
"name":"Alex",
"age":30,
"weight":70
}
我希望同时使用相同 ENTITY ,有机会取决于URL 发送给客户:
1。
{
"name":"Alex",
"age":30,
"weight":70
}
2。
{
"name":"Alex",
"age":30
}
答案 0 :(得分:1)
编辑:
您可以将其序列化为Map,而不是返回Entity对象,其中map键代表属性名称。因此,您可以根据include参数将值添加到地图中。
@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());
答案 1 :(得分:1)
您可以创建两个DTO类,将您的实体转换为适当的DTO类,然后将其返回。
A1 DD
答案 2 :(得分:1)
您还可以使用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..
}
在您的Rest Controller中
@JsonView(View.Private.class)
@GetMapping
public MyEntity get(){
...
return myEntity;
}
@JsonView(View.Public.class)
@GetMapping("url")
public List<MyEntity> getAll(){
...
return entities;
}