我试图将对象保存到数据库表中,但是当保存记录时,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.movieseat.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);
}
那么为什么系统会返回对象而不是对象中的值?或者至少我认为这是它正在做的事情。
答案 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(动画);