创建对象时将状态返回给Angular

时间:2017-12-03 20:31:43

标签: java spring

在我的应用中,用户可以将电影标题添加到他们的监视列表中。在我的组件中,我有这个功能:

createMovie(movie: Movie): void {
  this._dataService.createMovie<Movie>({'name': 'Star Wars', 'id': 111, 'description': 'A war in the Stars'})
  .subscribe((data) => this.movies.push(data),
  error => () => {
      'something went wrong';
  },
  () => {
      // console.log(this.movies);
  });
}

现在有一些虚拟信息。

在我的服务中,我有:

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

所以我将电影对象和令牌传递给后端。

在我的MovieController.java中,我有:

@RestController
@RequestMapping("api/movies")
public class MovieController {

  @Autowired
  private MovieService movieService;

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

movieService中的createMovie函数:

@Override 
public Movie createMovie(Movie movie) {

    movieRepository.save(movie);

    User current_user = userService.getUser();
    current_user.addMovie(movie);
    userRepository.save(current_user);

    return movie;
}

这一切都运行正常,但我想在电影成功添加到列表(数据库)时向角应用程序返回一条消息。我想我应该使用@ResponseBody,但我不确定如何将电影对象和状态文本返回到角度应用程序。

因此,例如,当添加电影时,我想返回一条消息&#34; movie.name已成功添加到您的监视列表中&#34;从后端。

1 个答案:

答案 0 :(得分:2)

要在对象旁边返回消息,您可以定义一个新类,如

public class RestResponse<T>{

    private String message;
    private T obj;

    public RestResponse(String message, T obj){
    this.message = message;
    this.obj = obj;
    }

}

然后在你的Rest控制器中你可以做

Movie result =  movieService.createMovie(movie);

return new RestResponse<Movie>(String.format("%s was added to your watchlist", movie.name ), result);