Spring Boot @ResponseBody没有序列化实体ID

有一个奇怪的问题,无法弄清楚如何处理。有简单的POJO:

@Entity

@Table(name = "persons")

public class Person {

@Id

@GeneratedValue

private Long id;

@Column(name = "first_name")

private String firstName;

@Column(name = "middle_name")

private String middleName;

@Column(name = "last_name")

private String lastName;

@Column(name = "comment")

private String comment;

@Column(name = "created")

private Date created;

@Column(name = "updated")

private Date updated;

@PrePersist

protected void onCreate() {

created = new Date();

}

@PreUpdate

protected void onUpdate() {

updated = new Date();

}

@Valid

@OrderBy("id")

@OneToMany(mappedBy = "person", fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)

private List<PhoneNumber> phoneNumbers = new ArrayList<>();

public Long getId() {

return id;

}

public void setId(Long id) {

this.id = id;

}

public String getFirstName() {

return firstName;

}

public void setFirstName(String firstName) {

this.firstName = firstName;

}

public String getMiddleName() {

return middleName;

}

public void setMiddleName(String middleName) {

this.middleName = middleName;

}

public String getLastName() {

return lastName;

}

public void setLastName(String lastName) {

this.lastName = lastName;

}

public String getComment() {

return comment;

}

public void setComment(String comment) {

this.comment = comment;

}

public Date getCreated() {

return created;

}

public Date getUpdated() {

return updated;

}

public List<PhoneNumber> getPhoneNumbers() {

return phoneNumbers;

}

public void addPhoneNumber(PhoneNumber number) {

number.setPerson(this);

phoneNumbers.add(number);

}

@Override

public String toString() {

return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);

}

}

@Entity

@Table(name = "phone_numbers")

public class PhoneNumber {

public PhoneNumber() {}

public PhoneNumber(String phoneNumber) {

this.phoneNumber = phoneNumber;

}

@Id

@GeneratedValue

private Long id;

@Column(name = "phone_number")

private String phoneNumber;

@ManyToOne

@JoinColumn(name = "person_id")

private Person person;

public Long getId() {

return id;

}

public void setId(Long id) {

this.id = id;

}

public String getPhoneNumber() {

return phoneNumber;

}

public void setPhoneNumber(String phoneNumber) {

this.phoneNumber = phoneNumber;

}

public Person getPerson() {

return person;

}

public void setPerson(Person person) {

this.person = person;

}

@Override

public String toString() {

return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);

}

}

其余端点:

@ResponseBody

@RequestMapping(method = RequestMethod.GET)

public List<Person> listPersons() {

return personService.findAll();

}

在json响应中,除了Id之外,还有其他所有字段,我需要在前端编辑/删除人员。如何配置Spring Boot" title="Spring Boot">Spring Boot来序列化ID?

这就是现在的响应:

[{

"firstName": "Just",

"middleName": "Test",

"lastName": "Name",

"comment": "Just a comment",

"created": 1405774380410,

"updated": null,

"phoneNumbers": [{

"phoneNumber": "74575754757"

}, {

"phoneNumber": "575757547"

}, {

"phoneNumber": "57547547547"

}]

}]

UPD具有双向hibernate映射,可能与问题有关。

回答:

我最近遇到了同样的问题,这是因为spring-boot-starter-data-rest默认情况下是这样工作的。请参阅我的SO问题-> 在将应用程序迁移到Spring Boot后使用Spring Data Rest时,我发现带有@Id的实体属性不再编组为JSON

要自定义其行为,可以扩展RepositoryRestConfigurerAdapter以公开特定类的ID。

import org.springframework.context.annotation.Configuration;

import org.springframework.data.rest.core.config.RepositoryRestConfiguration;

import org.springframework.data.rest.webmvc.config.RepositoryRestConfigurerAdapter;

@Configuration

public class RepositoryConfig extends RepositoryRestConfigurerAdapter {

@Override

public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {

config.exposeIdsFor(Person.class);

}

}

以上是 Spring Boot @ResponseBody没有序列化实体ID 的全部内容, 来源链接: utcz.com/qa/418584.html

回到顶部