当前位置: 首页 > 知识库问答 >
问题:

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

寇宏义
2023-03-14

我有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.@GetMap返回MyEntity类中描述的实体。
2.@GetMap("url")返回实体,就像它的一个字段带有@JsonIgnore一样。

更新:

例如,当我返回我的实体时,客户端将得到:

{
"name":"Alex",
"age":30,
"weight":70
}

我想在同一时间使用相同的ENTITY有机会根据URL发送给客户端:

1.

{
    "name":"Alex",
    "age":30,
    "weight":70
}

2.

{
    "name":"Alex",
    "age":30
    }

共有3个答案

燕翔飞
2023-03-14

编辑:

您可以不返回 Entity 对象,而是将其序列化为 Map,其中映射键表示属性名称。因此,您可以根据包含参数将值添加到地图中。

@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

严欣怡
2023-03-14

您可以创建两个 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();
}

@GetMapping("/my_url")
public PersonDetailedDTO get() {
   //...
   return personService.getPerson().toPersonDetailedDTO();
}
程鸿畅
2023-03-14

您还可以使用 JsonView 注释,这使其更简洁一些。定义视图

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控制器中

    @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

 类似资料:
  • 我正在开发Spring Boot应用程序与Spring Data JPA和H2数据库。我使用的是sping-data-jpa。当我使用ManyTo很多映射器类来获取另一个类的数据时。但是我发现它是NULL。 代码在github上 书班 著者班 测试中的测试代码捕捉器。班 我的代码有错误吗?或者其他方式? 非常感谢。

  • 问题内容: 我有一段维护代码,应该在某些时间点向某些用户授予选择特权: 我想对所有表执行此操作。我可以在Oracle或MySQL中使用它来获取完整列表,然后像这样继续前进。 但是由于我已经有了对象,所以我想知道是否还有另一种方法来获取所有映射的实体,经理知道(我正在使用Hibernate进行内部编程)。 问题答案: 我可以通过两种方式获取所有映射的实体及其对应的SQL表(可能还有其他)。 最直接的

  • 我需要用函数SSJS from mJson()读一个URL。例如Notes View的数据访问API http://{host}/{database}/api/data/collections/name/{name} 我该怎么做? P. S我认为(我不知道是否是真的),如果我使用Java代码(例如类URLReader从这个博客,我失去作者/读者的功能,因为是我的服务器,而不是当前用户执行读取流?

  • 问题内容: 为了验证我收到的数据,我需要确保该长度不会超过数据库列的长度。现在,所有长度信息都存储在Hibernate映射文件中,是否可以通过编程方式访问此信息? 问题答案: 您可以实现,但这并不容易。您可能想要在启动时执行以下操作,并存储值的静态缓存。有很多特殊情况要处理(继承等),但它应适用于简单的单列映射。我可能遗漏了一些instanceof和null检查。

  • 我需要拍摄一个div的屏幕截图,并需要将其发送到服务器(Java)进行存储。我公司项目中的现有代码使用Html2Canvas。js获取元素的位置(div,body…)返回base64数据URI,它工作正常,但在Chrome中冻结了应用程序。因此,我正在寻找其他解决方案,并从堆栈溢出中找到以下代码。 在这里,我得到的网址是Blob-Url(blob:https://fiddle.jshell.net

  • 我试着从地图上得到这样一个随机元素 但我认为最好的方法是使用谓词 我读过这个https://docs.hazelcast.com/imdg/4.2/query/how-distributed-query-works.html#querying-with-sql-like-predicates不幸的是这对我没有帮助 我找不到办法 在sql中是这样的 如何在hazelcast中生成正确的谓词? 你能举