【问题标题】:Spring Not sending all fields in JSON responseSpring没有在JSON响应中发送所有字段
【发布时间】:2017-06-05 01:50:59
【问题描述】:

我的 POJO:

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.Table;

import lombok.Data;


@Entity
@Table(name="user_linked_email")
@IdClass(UserLinkedEmailKey.class)
@Data
public class UserLinkedEmail implements Serializable {


    /**
     * serialVersionUID
     */
    private static final long serialVersionUID = 1L;

    @Id
    private Integer userId;
    @Id
    private String linkedEmail;


    /**
     * The Following are appearing in JSON response
     */
    private boolean status;

    private boolean preferredFlag;

}

UserLinkedEmailKey 类:

public class UserLinkedEmailKey implements Serializable {
    /**
     * serialVersionUID
     */
    private static final long serialVersionUID = 1L;

    private Integer userId;
    private String linkedEmail;
}

还有我的控制器片段:

public org.springframework.http.ResponseEntity<?> getLinkedEmails(@PathVariable(value = "userId") Integer zepoUserId) {


        try {
            List<UserLinkedEmail> linkedEmails = userService.getLinkedEmails(zepoUserId);


            //linkedEmails till this point has all 4 fields

            return new ResponseEntity<List<UserLinkedEmail>>(linkedEmails, HttpStatus.OK);

        } catch (Exception e) {
            //
        }

JSON 中的响应如下:

[
  {
    "status": false,
    "preferredFlag": true
  },
  {
    "status": true,
    "preferredFlag": false
  },
  {
    "status": true,
    "preferredFlag": false
  }
]

尽管 Spring-Data JPA 正在从存储库返回整个对象,但为什么其他两个字段(即 userId 和 linkedEmail)没有显示在响应中?

【问题讨论】:

  • @ScaryWombat Lombok 这样做.. 因此没有明确的 getter setter.. 但为了您的信息,我什至尝试从 POJO 中删除 @Data 并编写手动 getter setter.. 但结果仍然是一样
  • 抱歉没有注意到lombok标签。

标签: java json spring spring-data lombok


【解决方案1】:

默认情况下,Spring Data Rest 不再将 @Id 属性编组为 JSON。

这可以使用公开 ID 来实现 - 请检查 Spring Rest

类似的帖子在这里有详细的解释-id not marshalled to JSON

我建议使用中间响应类而不是将实体转换为 JSON。

【讨论】:

  • 另外,我建议使用中间响应类而不是将实体转换为 JSON。
【解决方案2】:

您需要为要公开公开的类成员定义公共 getter 方法。

【讨论】:

    猜你喜欢
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-07
    • 1970-01-01
    相关资源
    最近更新 更多