为什么我不能将对象转换为字符串?

时间:2017-09-18 19:16:33

标签: spring

我试图将对象保存到数据库表中,但是当保存记录时,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);
}

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

2 个答案:

答案 0 :(得分:2)

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

在你的例子中,你可能需要这样的东西:

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

基本上你正在做的是用System.out.println打印出对象值的方法,只有在这种情况下,toString方法提供了一个关于你属性的默认处理程序想打印,所以你不需要每次都指定它们。从功能上讲,这相当于做

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

但是,由于您可能会多次调用相同的print语句,因此更新每个print语句以添加名为Description的新参数会很麻烦。

无论如何 - 最好的做法是覆盖toString以打印出你的对象有各种原因(所有这些都需要进行大量讨论),但主要是它帮助我调试,因为你找到了第一手资料。

答案 1 :(得分:0)

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

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

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

的System.out.println(动画);