- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
有一个奇怪的问题,不知道如何处理。拥有简单的 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/
有什么区别吗 @ResponseBody public Object method(etc..) { etc.. } 和 public @ResponseBody Object method(
我有多个返回 JSON 对象的 REST 端点。对于大多数区域设置,响应都是正确的(所有符号都正确显示在响应中,并且内容类型为 application/json)。 如果我提供值为“en_NL”的 A
我有一个@restController类型 Controller ,当我访问请求的资源时,我得到一个json作为响应,问题是所有属性都出现在我看来,并且它不尊重我生成的构造函数。 但是,该类的所有属性
当我使用下面来获取用户对象时,它工作得很好。 @GetMapping("/findOne") @ResponseBody public Optional findOne (Long id) {
我有一个用于普通旧 xml Web 服务的 Spring MVC Controller ,方法如下: @RequestMapping( value = "/trade/{tradeId
我有一些东西可以通过 spring security 进行 ajax 登录: @RequestMapping(value="/entry.html", method=RequestMethod.GET
我有一个要求,我想处理异常的返回方式。根据 Controller 方法的类型,如果使用 @ResponseBody 注释,则应返回一个 json 字符串。此外,如果它是一个 String 返回方法,则
@ResponseBody 转化成json后与实体类字段名不一致 实体类A字段名由B改成C后,Controller 中返回的List中字段名仍然是C 经过@ResponseBody返回到前台后又变成了
我正在看一段代码,其中我假设spring决定在幕后使用Jackson为@RestController自动将对象转换为json @RestController @RequestMapping("/ap
它可能很简单,但它对我理解非常有帮助...... 我在我的 restcontroller 中使用 @ResponseBody 将 String 值返回给浏览器。浏览器成功接收响应字符串。 即: @Re
使用 @ResponseBody 时有没有办法将空值映射到空字符串的注释? 最佳答案 你将不得不编写一个自定义的 Jackson Serializer - 一个很好的例子在这里 - http://wi
我想在 spring mvc 方法中重定向到另一个 .jsp。我不想使用 javascripts 方法,例如:window.location.replace(url)。 我的方法: @RequestM
我有一个 RestController,它将 Film 对象列表发送回用户: @RestController @RequestMapping("/view") public class FilmRes
在 Spring Boot 中,我有最简单的 Controller ,返回我的 View 名称: @Controller public class HelloController { @Req
我只想将我的用户对象作为 JSON 返回,以供客户端的 ajax 调用使用。 这在某一点上是有效的,经过一些更新(即,将应用程序更改为部署到/在 Jetty 中),现在就不行了。 我没有从代码中抛出异
我基于 Spring MVC 构建我的 Web 应用程序,并在尝试在处理 ajax 请求的方法中添加 cookie 时遇到问题。 我意识到带有@ResponseBody 的方法(在我的示例中它返回一个
我希望我的字符串方法返回值。下面的代码返回一个 View (jsp)。在代码“line”中存储产品详细信息。我希望该方法返回该值。有人可以告诉我该怎么做吗? @RequestMapping(value
我正在尝试从网站获得响应。我正在使用 HttpURLConnection 类。 这是我的代码: BufferedReader in = null; in = new Buffer
我有以下 Spring @RestController 方法 @RequestMapping(value = "/getPeople", method = RequestMethod.GET) pub
如何创建用于模拟以下服务的 ResponseBody 对象? public interface SBRestfulApi { @FormUrlEncoded @POST("authen
我是一名优秀的程序员,十分优秀!