Spring 未发送 JSON 响应中的所有字段
Spring Not sending all fields in JSON response
我的 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 class:
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
}
]
为什么其他两个字段,即 userId 和 linkedEmail 没有显示在响应中,尽管 Spring-Data JPA 从存储库返回整个对象?
默认情况下,Spring Data Rest 不再将 @Id 属性编组到 JSON。
这可以通过公开 ID 来实现 - 请检查 Spring Rest
类似post这里有详细的解释-id not marshalled to JSON
我建议使用中间响应 Class 而不是将实体转换为 JSON。
您需要为要 public 公开的 class 成员定义 public getter 方法。
我的 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 class:
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
}
]
为什么其他两个字段,即 userId 和 linkedEmail 没有显示在响应中,尽管 Spring-Data JPA 从存储库返回整个对象?
默认情况下,Spring Data Rest 不再将 @Id 属性编组到 JSON。
这可以通过公开 ID 来实现 - 请检查 Spring Rest
类似post这里有详细的解释-id not marshalled to JSON
我建议使用中间响应 Class 而不是将实体转换为 JSON。
您需要为要 public 公开的 class 成员定义 public getter 方法。