【发布时间】:2020-11-30 17:28:38
【问题描述】:
我正在尝试为视频库开发 REST API。 使用电影控制器,我想获取、发布、放置和删除电影实体 (其中有列 id(生成的类型标识,它是主键)、title、genre、rate 和 number in stock)
“流派”是另一个实体,事实上,一部电影可以是一个唯一的流派(在我的项目中)
我希望我的 api 接受以下 JSON 请求
{
"title":"John Wick",
"rate":8.2,
"numberInStock":19,
"genreId":2
}
所以genreId指的是Id流派表,指向ID为2的流派名称,即“Action”
当我尝试发布如下电影时,邮递员收到 415 错误
{
"timestamp": "2020-08-11T03:57:31.792+00:00",
"status": 415,
"error": "Unsupported Media Type",
"message": "",
"path": "/video-library/movies/"
}
请教我哪里做错了
Movie.java
@Entity
@Table
public class Movie {
@Id
@GeneratedValue (strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
private String title;
private int rate;
@Column(name = "numberInStock")
private int numberInStock;
@ManyToOne(targetEntity = Genre.class)
@JoinColumn(name="genreId")
private Genre genre;
public Movie() {
}
public Movie(Integer id, String title, int rate, int numberInStock, Genre genre) {
super();
this.id = id;
this.title = title;
this.rate = rate;
this.numberInStock = numberInStock;
this.genre = genre;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public int getRate() {
return rate;
}
public void setRate(int rate) {
this.rate = rate;
}
public int getNumberInStock() {
return numberInStock;
}
public void setNumberInStock(int numberInStock) {
this.numberInStock = numberInStock;
}
@JsonManagedReference
public Genre getGenre() {
return genre;
}
public void setGenre(Genre genre) {
this.genre = genre;
}
}
Genre.java
@Entity
@Table
public class Genre {
@Id
@Column(name="genreId")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@OneToMany(mappedBy="genre", cascade = CascadeType.ALL)
private Set<Movie> movie;
@Column(name ="genre")
private String genre;
public Genre() {
}
public Genre(Integer id, Set<Movie> movie, String genre) {
super();
this.id = id;
this.movie = movie;
this.genre = genre;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@JsonBackReference
public Set<Movie> getMovie() {
return movie;
}
public void setMovie(Set<Movie> movie) {
this.movie = movie;
}
public String getGenre() {
return genre;
}
public void setGenre(String genre) {
this.genre = genre;
}
}
MovieRestcontroller
@CrossOrigin(origins = "http://localhost:3000")
@RestController
@RequestMapping("/video-library")
public class MovieController {
@Autowired
private MoiveRepository movieRepository;
//CRATE
//Add movie
@PostMapping("/movies")
public Movie createMovie(@RequestBody Movie movie)
{
return movieRepository.save(movie);
}
//READ
//Get a list of all movies
@GetMapping("/movies")
public List<Movie> getAllMovie(){
return movieRepository.findAll();
}
//Get single movie
@GetMapping("/movies/{id}")
public ResponseEntity<Movie> getMovieById(@PathVariable Integer id){
Movie movie = movieRepository.findById(id).orElseThrow(()->
new ResourseNotFoundException("404 Error: Movie not exist with the Given "+id));
return ResponseEntity.ok(movie);
}
//UPDATE
//Updated movie
@PutMapping("/movies/{id}")
public ResponseEntity <Movie> updateMovie(@PathVariable Integer id, @RequestBody Movie movieDetails){
Movie movie = movieRepository.findById(id).orElseThrow((() ->
new ResourseNotFoundException("404 Error: Movie not exist with the Given "+id)));
movie.setTitle(movieDetails.getTitle());
movie.setRate(movieDetails.getRate());
// movie.setGenre(movieDetails.getGenre());
movie.setNumberInStock(movieDetails.getNumberInStock());
Movie updateMovie = movieRepository.save(movie);
Map<String,Boolean> response = new HashMap<>();
response.put("Movie Updated Successfully",Boolean.TRUE);
return ResponseEntity.ok(updateMovie);
}
//DELETE
//Delete movie
@DeleteMapping("/movies/{id}")
public ResponseEntity <Map<String, Boolean>> deleteMovie(@PathVariable Integer id){
Movie employee = movieRepository.findById(id)
.orElseThrow((() -> new ResourseNotFoundException("404 Error: Movie not exist with the Given "+id)));
movieRepository.delete(employee);
Map<String,Boolean> response = new HashMap<>();
response.put("Movie Deleted Successfully",Boolean.TRUE);
return ResponseEntity.ok(response);
}
}
流派控制器
@CrossOrigin(origins = "http://localhost:3000")
@RestController
@RequestMapping("/video-library")
public class GenreController {
@Autowired
public GenreRepository genreRepository;
@PostMapping("/genre")
public Genre createGenre(@RequestBody Genre genre)
{
return genreRepository.save(genre);
}
@GetMapping("/genre")
public List<Genre> getAllGenre(){
return genreRepository.findAll();
}
@GetMapping("/genre/{id}")
public ResponseEntity<Genre> getGenreById(@PathVariable Integer id){
Genre genre = genreRepository.findById(id).orElseThrow(()->
new ResourseNotFoundException("404 Error: Genre not exist with the Given "+id));
return ResponseEntity.ok(genre);
}
}
【问题讨论】:
-
您使用哪个客户端来测试您的 REST API?
标签: java spring spring-boot spring-mvc spring-data-jpa