当前位置: 首页 > 知识库问答 >
问题:

覆盖实体响应到字符串方法

郑西岭
2023-03-14

我正在使用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+  '}';
}

流派是具有流派ID和定义的对象流派列表。我在类型课上也有这样的内容:

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

这是toString方法:

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

我不想让genreId出现在我的结果中,但我做到了。调试我在controller中看到的代码:return new ResponseEntity

这是一个结果示例:

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

一些提示?

共有1个答案

程毅
2023-03-14

您的输出是由JSON序列化器生成的,它不使用toString()方法。

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

在某些情况下进行更新(基于JSON序列化程序配置/错误等,仅用JsonIgonre标记字段是不够的,还应该标记此字段的getter。如下所示。

示例:

class Genre {

   @JsonIgnore
   private long genreId;

   @JsonIgnore
   public long getGenreId() { 
      return genreId;
   }
   // the rest of your Genre class ... 
}

 类似资料:
  • 我目前正在创建一个gRPC服务,该服务使用gRPC网关/HTTP反向代理也提供HTTP支持。我想遵循谷歌API设计的常见惯例。 我在Google API设计指南中找到的示例使用了Google。protobuf。清空删除方法/RPC响应的消息。这很好,但是当我生成一个

  • 我正在为我的RESTful API使用FOS Rest捆绑包,我想覆盖从我的ApiController返回的响应,例如: PHP 我想要的是向返回的响应添加额外的数据,因此我想要截获这些响应并根据某些条件覆盖它们。 我想要api返回的最终结果:

  • 问题内容: 我正在使用Retrofit1旧样式 现在,我不想获取“ User”类,但是我想要获取String响应。 以前我们使用的是“ Response”,但是在改造2中没有“ Response”, 我如何在不使用任何json解析的情况下从服务器获取字符串响应或全身响应? 问题答案: 建立这个课程 与它一起使用 编辑: 您必须将其定义为 retrofit2不支持回调,因此您必须删除它。要使其异步,

  • 我有下面的结构,我想用MapStruct映射这个。 下面是mapstruct为toDTO方法生成的实现 下面是mapstruct为toEntity方法生成的实现 我的问题是方法只在文本不为空时设置注释。但是方法不检查空文本或空文本。因此,如果我在DTO中获得,它将创建一个新的comment对象并将文本设置为null。如何避免这一点?有人能解释一下这种行为并建议我正确的做法吗?谢了!

  • 问题内容: 我想反序列化一个JSON字符串,该字符串不一定包含每个成员的数据,例如: 假设我有一个实例: 我反序列化一个字符串: 结果应该是 框架和两者都以其反序列化方法返回新对象,因此,我直接想到的唯一方法是使用反射将反序列化的对象与现有对象进行比较,这似乎有很多不必要的开销。理想情况下,某些软件将具有一种方法,其中我传递了对象的现有实例,并且仅字符串中存在的那些成员将被更新。这里的要点是,我希

  • 问题内容: 这里的第一个问题,是新手,所以尝试让我轻松一点。我正在尝试找出问题所在: 此方法返回字符串数组的列表,这些数组是从SQLite数据库检索的。一切工作都与以下事实不同:每次while循环重复自身时,结果中的字符串数组似乎都会被覆盖。最后一个总是给我从数据库中检索到的最后一行的信息,但是如果我在循环中放入一个循环,它将在每个while周期返回适当的数据。我真的不知道我的元素在哪里被覆盖。这