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

k2fxgqgv  于 5个月前  发布在  Spring
关注(0)|答案(1)|浏览(73)

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


inb24sb2

inb24sb21#

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

相关问题