Spring Boot Sping Boot API不显示来自MongoDB数据库的更新数据

k2fxgqgv  于 2024-01-06  发布在  Spring
关注(0)|答案(1)|浏览(136)

我在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:

  1. @RestController
  2. @RequestMapping("/api/movies")
  3. public class MovieController {
  4. private final MovieService movieService;
  5. MovieController(MovieService movieService) {
  6. this.movieService = movieService;
  7. }
  8. @GetMapping
  9. public ResponseEntity<List<Movie>> getAllMovies() {
  10. return new ResponseEntity<List<Movie>>(movieService.allMovies(), HttpStatus.OK);
  11. }
  12. @GetMapping("/{imdbId}")
  13. public ResponseEntity<Optional<Movie>> getSingleMovie(@PathVariable String imdbId) {
  14. return new ResponseEntity<Optional<Movie>>(movieService.singleMovie(imdbId), HttpStatus.OK);
  15. }
  16. }

字符串

MovieService.java:

  1. @Service
  2. public class MovieService {
  3. private final MovieRepository movieRepository;
  4. MovieService(MovieRepository movieRepository) {
  5. this.movieRepository = movieRepository;
  6. }
  7. public List<Movie> allMovies() {
  8. return movieRepository.findAll();
  9. }
  10. public Optional<Movie> singleMovie(String imdbId) {
  11. return movieRepository.findMovieByImdbId(imdbId);
  12. }
  13. }

ReviewController.java:

  1. @RestController
  2. @RequestMapping("/api/reviews")
  3. public class ReviewController {
  4. @Autowired
  5. private ReviewService reviewService;
  6. @PostMapping
  7. public ResponseEntity<Review> createReview(@RequestBody Map<String, String> payload)
  8. {
  9. return new ResponseEntity<Review>(reviewService.createReview(payload.get("reviewBody"), payload.get("imdbId")), HttpStatus.CREATED);
  10. }
  11. }

ReviewService.java:

  1. @Service
  2. public class ReviewService {
  3. @Autowired
  4. private ReviewRepository reviewRepository;
  5. @Autowired
  6. private MongoTemplate mongoTemplate;
  7. public Review createReview(String reviewBody, String imdbId) {
  8. Review review = reviewRepository.insert(new Review(reviewBody));
  9. mongoTemplate.update(Movie.class).matching(Criteria.where("imdbId").is(imdbId)).apply(
  10. new Update().push("reviewIds").value(review)).first();
  11. return review;
  12. }
  13. }


我尝试使用GSON依赖项直接在Java中打印JSON响应,它也只显示列表为空。所以我猜问题肯定不是使用InsomniaAPI或Chrome。

更新数据库:


的数据

数据库列表更新后API响应:


inb24sb2

inb24sb21#

我在构造函数、getters & setters和update函数中写了'reviewsIds',而我的电影收藏中有'reviewIds'。

相关问题