2017-09-18 99 views
0

我试图将一个对象保存到数据库表中,但是当记录保存时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​​[email protected]

我会想到的是

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

你是如何为'Movie'定义'toString()'的? – doelleri

+0

@doelleri'System.out.println(movie.toString());'它在第一个代码块中。 –

+0

在你的'Movie'类中覆盖'toString'。 –

回答

0

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

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

,如果你使用的是IntelliJ按ALT +插入和产生的toString然后用

的System.out.println(电影)尝试;

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语句添加一个名为说明新参数的疼痛。

无论如何 - 这是一个最好的做法,以覆盖toString打印出你的对象有各种各样的原因(都受到很多讨论),但主要是它帮助我进行调试,因为你正在找到第一手。