gpt4 book ai didi

java - Spring boot @ResponseBody 不序列化实体 id

转载 作者:IT老高 更新时间:2023-10-28 11:41:13 24 4
gpt4 key购买 nike

有一个奇怪的问题,不知道如何处理。拥有简单的 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来序列化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 问题 -> While using Spring Data Rest after migrating an app to Spring Boot, I have observed that entity properties with @Id are no longer marshalled to 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);
}
}

关于java - Spring boot @ResponseBody 不序列化实体 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24839760/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com