【问题标题】:How to return the inner fields at same level in Spring Boot?如何在 Spring Boot 中返回同一级别的内部字段?
【发布时间】:2022-01-04 08:46:09
【问题描述】:

我想在这里返回同一级别的课程。

因为这里 id、用户名、密码等都在 userCredentialEntity 下,所以在 userDetailEntity 键中。

{
  "userCredentialsEntity": {
    "id": 5,
    "username": "testuser3",
    "password": "$2a$10$yFmeUcE3uTOf9H4TZqWXfO/b8zsTp6sqnWax5iyRXBhlfXF3dSsk2",
    "email": "testuser3@gmail.com",
    "roles": [
      {
        "id": 2,
        "name": "ROLE_MANAGER"
      }
    ]
  },
  "userDetailsEntity": {
    "userId": 5,
    "first_name": "Test",
    "last_name": "Singh 3",
    "birth_date": "12",
    "birth_month": "01",
    "birth_year": "2002",
    "area": "Chandani Chowk",
    "city": "Sahadra",
    "district": "Sonbhadra",
    "pin_code": 231325,
    "mobile_number": "6788762345"
  }
}

我必须退货。

{
    "id": 5,
    "username": "testuser3",
    "email": "testuser3@gmail.com",
    "roles": [
        {
          "id": 2,
          "name": "ROLE_MANAGER"
        }
    ],
    "first_name": "Test",
    "last_name": "Singh 3",
    "birth_date": "12",
    "birth_month": "01",
    "birth_year": "2002",
    "area": "Chandani Chowk",
    "city": "Sahadra",
    "district": "Sonbhadra",
    "pin_code": 231325,
    "mobile_number": "6788762345"
}

并且在返回时也忽略了密码和userId字段

我的实现代码是:

@Data
public class UserMerged {
    private UserCredentialsEntity userCredentialsEntity;
    private UserDetailsEntity userDetailsEntity;
}
UserDetailsEntity userDetailsEntity = userDetailService.fetchUserDetails(userId).get();
UserCredentialsEntity userCredentialsEntity = userCredentialsRepository.findByUsername(username);
UserMerged userMerged = new UserMerged();
userMerged.setUserDetailsEntity(userDetailsEntity);
userMerged.setUserCredentialsEntity(userCredentialsEntity);
return ResponseEntity.ok().body(userMerged);

我是 Spring Boot 的新手,对此没有任何满意的答案。请建议我实现这一目标的任何方法。 谢谢。

【问题讨论】:

  • 为它创建合适的数据结构。你的 UserMerged 应该代表你想要的返回类型,目前它没有,那么你会期待什么?将您的UserMerged 更改为您需要的,并将实体中的字段正确映射到这些字段。
  • 好的,谢谢。但是如果 userCredentials 和 userDetails 中的字段太多,那么我必须再重复一遍。遇到这种情况该怎么办?
  • 重复什么?您只需要创建一个代表您想要的结果的对象,然后从其他对象复制到您想要的对象。

标签: json spring spring-boot spring-data-jpa spring-data


【解决方案1】:

首先,无论你返回的对象类型是什么,为此你需要创建特定的类,然后返回它。

在您的情况下,使用您想要返回的任何内容修改您的 UserMerged 类,然后相应地设置参数。

可能,

您的UserMerged 将是

@Data
public class UserMerged {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer Id;

@Column(name="username")
private String username;    

@Column(name="email")
private String email;

@Column(name="roles")
private List<Roles> roles;  

@Column(name="first_name")
private String first_name;

@Column(name="last_name")
private String last_name;

@Column(name="birth_date")
private String birth_date;

@Column(name="birth_month")
private String birth_month;

@Column(name="birth_year")
private String birth_year;

@Column(name="area")
private String area;

@Column(name="city")
private String city;

@Column(name="district")
private String district;

@Column(name="pin_code")
private Integer pin_code;

@Column(name="mobile_number")
private Integer mobile_number;

您可以将这两个类中的字段设置为UserMerged 类,而不是设置UserDetailsEntityUserCredentialsEntity

    userMerged.setId(userCredentialsEntity.getId());
    userMerged.setUsername(userCredentialsEntity.getUsername());
    userMerged.setEmail(userCredentialsEntity.getEmail());
    userMerged.setRoles(userCredentialsEntity.getRoles());
    userMerged.setFirst_name(userDetailsEntity.getFirst_name());
    userMerged.setLast_name(userDetailsEntity.getLast_name());
    userMerged.setBirth_date(userDetailsEntity.getBirth_date());
    userMerged.setBirth_month(userDetailsEntity.getBirth_month());
    userMerged.setBirth_year(userDetailsEntity.getBirth_year());
    userMerged.setArea(userDetailsEntity.getArea());
    userMerged.setCity(userDetailsEntity.getCity());
    userMerged.setDistrict(userDetailsEntity.getDistrict());
    userMerged.setPin_code(userDetailsEntity.getPin_code());
    userMerged.setMobile_number(userDetailsEntity.getMobile_number());

这将设置您需要的所有参数,您可以返回用户合并对象的对象。

这里有很多重复的代码,所以请注意这一点,或者您也可以将常用参数添加到一个类中。

【讨论】:

    猜你喜欢
    • 2021-11-11
    • 1970-01-01
    • 2019-12-14
    • 2017-01-11
    • 2022-10-06
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 2021-11-14
    相关资源
    最近更新 更多