我正在尝试为视频库开发REST。使用电影控制器,我希望获取、发布、放置和删除电影实体(其中有列id (生成的类型标识,它是主键)、标题、类型、比率和数量)。
“体裁”是另一个实体,因为一部电影只能是一种类型(在我的项目中)。
我希望我的api接受以下JSON请求
{
"title":"John Wick",
"rate":8.2,
"numberInStock":19,
"genreId":2
}因此,genreId引用Id类型表,并指向Id 2的体裁名称,即“动作”
当我试图发布像下面这样的电影时,邮递员出现了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);
}
}GenreController
@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);
}
}发布于 2020-08-11 05:02:49
尝试在您的consumes和@PostMapping注释中使用@GetMapping和@PostMapping属性,如:
@PostMapping(path = "/genre",consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@GetMapping(path = "/movies/{id}", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)你传递了错误的请求。您的请求应该包含genre作为对象。试一试
{
"title":"John Wick",
"rate":8.2,
"numberInStock":19,
"genre":{"genreId":2}
}发布于 2020-08-11 05:09:41
您使用哪个客户端来测试REST?
所有客户端都有允许在请求中设置Content-type:application/json头的选项。
在Postman中,选择Body选项卡,然后选择raw,然后将右边的TEXT更改为JSON。
https://stackoverflow.com/questions/63351551
复制相似问题