我在Sping Boot 中创建了一个API,它连接到MongoDB本地主机数据库。该数据库有两个集合“movies”和“reviews”。API使用“movies”集合使用GET请求获取电影。API中的Movie对象包含一个Review对象列表,该列表将在JSON中显示为reviewIds
列表,作为获取所有电影的API响应。每个movie对象包含这样的reviewIds
列表。当我使用GET请求时,它正确地获取所有电影。当我使用POST请求通过插入Review对象来更新reviewIds
列表时,数据库也显示成功完成的更改。但是现在如果我尝试使用GET请求通过API请求查看电影集合,它仍然显示reviewIds
列表为空,而它在数据库中显示为完美更新。
MovieController.java:
@RestController
@RequestMapping("/api/movies")
public class MovieController {
private final MovieService movieService;
MovieController(MovieService movieService) {
this.movieService = movieService;
}
@GetMapping
public ResponseEntity<List<Movie>> getAllMovies() {
return new ResponseEntity<List<Movie>>(movieService.allMovies(), HttpStatus.OK);
}
@GetMapping("/{imdbId}")
public ResponseEntity<Optional<Movie>> getSingleMovie(@PathVariable String imdbId) {
return new ResponseEntity<Optional<Movie>>(movieService.singleMovie(imdbId), HttpStatus.OK);
}
}
字符串
MovieService.java:
@Service
public class MovieService {
private final MovieRepository movieRepository;
MovieService(MovieRepository movieRepository) {
this.movieRepository = movieRepository;
}
public List<Movie> allMovies() {
return movieRepository.findAll();
}
public Optional<Movie> singleMovie(String imdbId) {
return movieRepository.findMovieByImdbId(imdbId);
}
}
型
ReviewController.java:
@RestController
@RequestMapping("/api/reviews")
public class ReviewController {
@Autowired
private ReviewService reviewService;
@PostMapping
public ResponseEntity<Review> createReview(@RequestBody Map<String, String> payload)
{
return new ResponseEntity<Review>(reviewService.createReview(payload.get("reviewBody"), payload.get("imdbId")), HttpStatus.CREATED);
}
}
型
ReviewService.java:
@Service
public class ReviewService {
@Autowired
private ReviewRepository reviewRepository;
@Autowired
private MongoTemplate mongoTemplate;
public Review createReview(String reviewBody, String imdbId) {
Review review = reviewRepository.insert(new Review(reviewBody));
mongoTemplate.update(Movie.class).matching(Criteria.where("imdbId").is(imdbId)).apply(
new Update().push("reviewIds").value(review)).first();
return review;
}
}
型
我尝试使用GSON依赖项直接在Java中打印JSON响应,它也只显示列表为空。所以我猜问题肯定不是使用InsomniaAPI或Chrome。
更新数据库:
的数据
数据库列表更新后API响应:
的
1条答案
按热度按时间inb24sb21#
我在构造函数、getters & setters和update函数中写了'reviewsIds',而我的电影收藏中有'reviewIds'。