覆盖EntityResponse toString方法

时间:2018-01-26 10:06:39

标签: java rest swagger tostring

我正在玩REST服务。 我用swagger编辑器创建了一个API定义,然后我为Springboot服务器生成了代码。 在Eclipse中进行了一些更改之后,一切正常,但我有一个问题",我无法覆盖toString方法来显示我想要的结果。 (有一个名为Genre的对象,带有genreId和定义,我不想显示genreId)

这是Controller中的方法实现:

public ResponseEntity<List<Movie>> findMovies(
@ApiParam(value = "Tags used to filter the result") @RequestParam(value = 
"tags", required = false) List<String> tags,
@ApiParam(value = "maximum number of results to return") @RequestParam(value = 
"limit", required = false) Integer limit) {
List<Movie> movies = movieRepository.findAll();
return new ResponseEntity<List<Movie>>(movies, HttpStatus.OK);
}

这是Model类中的toString方法:

@Override
public String toString(){
return "Movie {"+"movieId='" + movieId + '\'' + ", title='" + title + '\'' +", 
description='"+ description + '\'' +", rating='"+rating+ '\'' 
+"price='"+price+ '\'' +"genres='"+genres+  '}';
}

类型是具有genreId和定义的对象类型列表。 我在Genre课上也有这个:

@Id
@JsonProperty("genre_id")
@JsonIgnore
private String genreId;
private String definition;

这是toString方法:

@Override
public String toString() {
return "Genre {"+"definition='" + definition + '}';
}

我不想在我的搜索结果中使用genreId,但我拥有它。 调试我在控制器中看到的代码: 返回新的ResponseEntity&gt;(电影,HttpStatus.OK); 电影对象没有genreId,所以对某些人来说 原因ResponseEntity打印它。我插入了一个brekpoint,并且Genre中的toString方法不被称为

这是结果的一个例子:

{
"genres": [
{
"genreId": "1",
"definition": "Fantasy"
}
],
"movie_id": "2",
"title": "The Hobbit",
"description": "A fantasy journey",
"rating": 6,
"price": 30
}

一些提示?

1 个答案:

答案 0 :(得分:1)

您的输出是由JSON序列化程序生成的,它不使用genreId方法。

它使用字段注释来确定应将哪些字段序列化(或忽略)为json格式。使用Genre注释在@JsonIgnore类中标记@JsonIgonre,以从JSON输出中排除此字段。

<强>更新 在某些情况下(基于JSON序列化程序配置/错误/等,仅使用class Genre { @JsonIgnore private long genreId; @JsonIgnore public long getGenreId() { return genreId; } // the rest of your Genre class ... } 标记字段是不够的,您还应该标记此字段的getter。如下所示。

示例:

{{1}}