【问题标题】:Renaming a class variable not reflected in JSON output重命名未反映在 JSON 输出中的类变量
【发布时间】:2018-06-02 18:54:49
【问题描述】:

我在 Eclipse 中使用 Spring MVC 做一个 Web 服务,它从数据库中读取数据并将其转储为 JSON。我最近在类中添加了一个新变量,用于保存数据库中表中的一行,例如:

public class DbRow {
  private Integer Id;
  private String  Label;
  ...
  public String getLabel() {
    return Label;
  }
  public void setLabel(String label) {
    this.Label = label;
  }
}

但是,随着后来数据库中列的名称发生变化,我通过重命名类变量(使用 Refactor -> Rename... 或 Eclipse 中的 Alt + Shift + R)以及它的 getter 和 setter 来反映这一点像这样的方法:

public class DbRow {
  private Integer Id;
  private String  Title;
  ...
  public String getTitle() {
    return Title;
  }
  public void setLabel(String title) {
    this.Title = title;
  }
}

我现在的问题是,在服务的 JSON 输出中,该字段仍然是这样的旧名称

{"Id":"100","Label":"Test"}

而不是

{"Id":"100","Title":"Test"}

这会破坏我在 Eclipse 中使用 TestNG 运行的 mockMvc 测试(例如错误 org.springframework.restdocs.sn-p.SnippetException:在有效负载中找不到具有以下路径的字段:[Title])。

我该如何解决这个问题?

【问题讨论】:

  • 方法setLabel(String title)可能还没有被重构。
  • 你确定要重命名getter和setter吗?
  • 其实是getter,我把例子混了。

标签: java json spring eclipse spring-mvc


【解决方案1】:

你的 setter 方法还是旧的

public void setLabel(String title) { this.Title = title; }

setTitle(String title) 更新它。此外,尝试清理构建项目并在之后运行您的测试用例。

【讨论】:

  • 实际上,我在示例中犯了一个错误,但在真正的代码中是getter没有被重命名,所以这是真正的问题。确实不错的建议:-) 谢谢。
  • 我应该在重命名字段对话框中使用“重命名 getter”和“重命名 setter”来自动重构 getter 和 setter 的名称以及字段。
猜你喜欢
  • 2015-06-10
  • 2011-03-29
  • 2017-06-10
  • 2018-10-07
  • 2018-04-14
  • 2016-08-02
  • 2022-01-20
  • 1970-01-01
  • 2020-05-03
相关资源
最近更新 更多