【问题标题】:Why can't I convert a object to string?为什么我不能将对象转换为字符串?
【发布时间】:2017-09-18 19:16:33
【问题描述】:

我正在尝试将对象保存到数据库表中,但保存记录时,name 值为空。我正在使用 Spring 和 Hibernate。

当我在MovieController 中记录对象时:

@RequestMapping(value = "/", method = RequestMethod.POST)
public Movie createMovie(@RequestBody Movie movie){
    System.out.println(movie.toString());
    return movieService.createMovie(movie);
}

我看到这个值被记录了。

com.movi​​eseat.models.Movie@abee456

我期待的是

id:20,名称:星球大战

在我的app.component.ts 我有:

createMovie(movie: Movie): void {
  this._dataService.createMovie<Movie>({'id': 20, 'name': 'Star Wars'})
  .subscribe((data) => this.movie = data,
  error => () => {
      'something went wrong';
  },
  () => {
      console.log(this.movies);
  });
}

app.service.ts

public createMovie<T>(movie: Movie): Observable<T> {
    console.log(movie);
    return this.http.post<T>('/api/movies/', movie);
}

那么为什么系统返回的是对象而不是对象中的值呢?或者至少我认为这就是它正在做的事情。

【问题讨论】:

  • 你是如何为Movie定义toString()的?
  • @doelleri System.out.println(movie.toString()); 在第一个代码块中。
  • Movie 类中覆盖 toString
  • @PeterBoomsma 这就是你所说的,而不是定义它。
  • 啊在那种情况下我还没有定义它。你能指导一下如何做到这一点吗?

标签: spring


【解决方案1】:

覆盖toString 相当容易。您可以使用 IDE 自动生成代码,或者直接写出来。

在您的示例中,您可能只需要这样的东西:

@Override
public String toString(){
    return "id: " + id + "name: " + name;
} 

本质上,您所做的与使用 System.out.println 打印出对象的值相同,只是在这种情况下,toString 方法提供了一个默认处理程序来处理您想要打印的属性,因此您不需要每次都指定它们。在功能上这相当于做

System.out.println("id: " + movie.getId() + "name: " + movie.getName());

但是,由于您可能多次调用同一个打印语句,因此更新每个打印语句以添加一个名为 Description 的新参数会变得很痛苦。

无论如何 - 最好的做法是覆盖 toString 以出于各种原因打印出您的对象(所有这些都需要进行大量讨论),但主要是它帮助我进行调试,正如您首先发现的那样手。

【讨论】:

    【解决方案2】:

    转到 Movie.java 并生成 toString 方法。

    我建议您使用 IDE 的功能来生成它。不要手动编码。

    如果您使用 Intellij,请按 ALT + Insert 并生成 toString 然后尝试

    System.out.println(电影);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-13
      • 2021-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多