如何根据映射URL从RestController获取实体

时间:2019-03-05 02:27:16

标签: java spring rest spring-boot jpa

我有 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
    }

3 个答案:

答案 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 2 3

答案 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;
    }

已经在这里说明: https://stackoverflow.com/a/49207551/3005093