2017-09-18 101 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打印出你的對象有各種各樣的原因(都受到很多討論),但主要是它幫助我進行調試,因爲你正在找到第一手。