为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

明月笑刀无情 2022-07-20 17:03:33
我有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方法。首先:@GetMappingpublic MyEntity get(){   ...   return myEntity;} 第二:@GetMapping("url")   public List<MyEntity> getAll(){   ...   return entities;}需要提供:1. @GetMapping返回实体,如MyEntity 类中所述。2. @GetMapping("url")返回实体,就像它的字段之一是@JsonIgnore。更新:当我返回 myEntity 时,客户端将获得,例如:{"name":"Alex","age":30,"weight":70}我希望在同一时间使用相同的 ENTITY有机会取决于发送给客户端的 URL:1.{    "name":"Alex",    "age":30,    "weight":70}2.{    "name":"Alex",    "age":30    }
查看完整描述

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;

    }


查看完整回答
反对 回复 2022-07-20
?
叮当猫咪

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());


查看完整回答
反对 回复 2022-07-20
?
RISEBY

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();

}


查看完整回答
反对 回复 2022-07-20
  • 3 回答
  • 0 关注
  • 112 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信