【问题标题】:SpringFramework ResponseBody returns objects with null valuesSpringFramework ResponseBody 返回具有空值的对象
【发布时间】:2017-11-29 15:24:02
【问题描述】:

我有一个 RestController 向用户发回一个 Film 对象列表:

@RestController
@RequestMapping("/view")
public class FilmRestController {

    @RequestMapping(value = "/", method = RequestMethod.GET,  produces = "application/json")
    public @ResponseBody List<Film> getCurrentFilms(){
        FilmInfo filmInfo = new FilmInfo();
        return filmInfo.getCurrentFilms();
    }
}

每个 Film 对象包含两个字符串(标题、导演)和演员列表。所以相当简单的pojo。

当我在 Postman 中发出请求时,我得到以下响应:

[
{
    "title": null,
    "director": null,
    "actors": null
},
{
    "title": null,
    "director": null,
    "actors": null
},
{
    "title": null,
    "director": null,
    "actors": null
},
{
    "title": null,
    "director": null,
    "actors": null
}
]

一开始我以为这是个小故障,所以后来写了如下方法:

@RequestMapping(value = "/getOneFilm", method = RequestMethod.GET,  produces = "application/json")
public @ResponseBody Film getOneFilm(){
    Film film = new Film("The Shawshank Redemption", "Frank Darabont", Arrays.asList("Tim Robbins","Morgan Freeman","Bob Gunton"));
    return film;
}

果然我的回应是:

{
"title": null,
"director": null,
"actors": null
}

这里是我的电影课:

package entities;

import java.util.List;

public class Film {

private String title;
private String director;
private List<String> actors;

public Film(String title, String director, List<String> actors) {
    title = this.title;
    director = this.director;
    actors = this.actors;
}


public String getTitle() {
    return title;
}
public void setTitle(String title) {
    this.title = title;
}
public String getDirector() {
    return director;
}
public void setDirector(String director) {
    this.director = director;
}
public List<String> getActors() {
    return actors;
}
public void setActors(List<String> actors) {
    this.actors = actors;
}
}

ResponseBody 是否有原因无法将我的对象转换为在响应中发回?我应该改变策略并手动执行我的 JSON 序列化程序吗?我

【问题讨论】:

  • 你可以发布你的课程Film 吗?而当你使用注解RestController时,你就不需要ResponseBody注解了。 public Film getOneFilm(){ 应该可以完美运行。
  • @CrazySabbath 我已将我的电影课程添加到问题中。我原以为它也很完美。但不幸的是它没有。

标签: java json spring serialization


【解决方案1】:

在您的构造函数中,您正在更新参数而不是属性:

public Film(String title, String director, List<String> actors) {
    title = this.title;
    director = this.director;
    actors = this.actors;
}

类中的属性保持为空。将其更改为:

public Film(String title, String director, List<String> actors) {
    this.title = title;
    this.director = director;
    this.actors = actors;
}

【讨论】:

  • 谢谢。我以前从来没有把它们弄混过。我的眼睛有时会这样做:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-28
  • 2011-03-17
  • 1970-01-01
  • 1970-01-01
  • 2018-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多