Spring Boot API无法读取MongoDB中已更新的reviewIds数据求助
问题:Spring Boot MongoDB API中reviewIds更新后GET请求返回为空
我基于Spring Boot开发了一个连接本地MongoDB的API,数据库包含movies和reviews两个集合。API通过GET请求获取movies集合的数据,Movie对象包含一个Review对象列表,在接口响应中该列表以reviewIds字段的形式展示。
调用GET请求时能正常获取所有电影数据;但通过POST请求向指定电影的reviewIds列表插入Review对象后,数据库中已成功显示该列表更新,再次调用GET请求获取电影集合时,API返回的reviewIds仍为空。我尝试用GSON直接输出JSON响应,结果还是空,因此排除了Insomnia、Chrome等客户端工具的问题。
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; } }
更新后的数据库状态

更新后GET请求的API响应

内容的提问来源于stack exchange,提问作者Harshal Kansara
相关产品推荐
相关产品推荐

