Search code examples
jsonspringspring-dataparameter-passing

I sent a post request, but I keep getting a null value


i send this data i send this data but it always get null but it always get null

I want to comment on each movie

I don't know where the problem is

CommentController

It's the part where you get it through post-mapping and hand it over to service

I couldn't get movie_Id, so I got a movie_Id for the variable id

@PostMapping("/search/{title}/comments")
public ResponseEntity<CommentDto> addComment(@PathVariable String title,@RequestBody CommentDto dto) {
            

log.info("received Dto{}",dto.toString());

    int id= moviesSearchService.findByTitletoId(title);
    CommentDto commentDto=commentService.create(id,dto);

    return ResponseEntity.status(HttpStatus.OK).body(commentDto);
}

When I look at the log, it says that the request body itself is null
like this

2024-05-05T00:14:57.173+09:00 INFO 1880 --- [softwareEngBE] [nio-8080-exec-1] c.e.s.controller.CommentApiController : received DtoCommentDto(id=0, movieId=0, rating=0, comment=null)

CommentService

It's a processing process of storing in the Repository, I don't think there's no problem.

public CommentDto create(int id, CommentDto dto) {
Movies movies = moviesRepository.findById(id)
        .orElseThrow(()-> new IllegalArgumentException("No exist movie"));



Comment comment=Comment.createComment(dto,movies);

Comment created=commentRepository.save(comment);
return CommentDto.createCommentDto(created);
}

CommentDto

I can't find a lot of questions, but I can't find it.I put it well in the camelCase

public class CommentDto {
    @JsonProperty("id")
    private long id;

    @JsonProperty("movie_Id")
    private int movieId;

    @JsonProperty("rating")
    private int rating;

    @JsonProperty("comment")
    private String comment;


    public static CommentDto createCommentDto(Comment comment) {
        return new CommentDto(
                comment.getId(),
                comment.getMovies().getMovie_Id(),
                comment.getRating(),
                comment.getComment()
        );
    }
}

Comment, Movies Entity

It's my first time writing a code using fk and I think there might be a problem here as well

public class Comment {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @ManyToOne
    @JoinColumn(name="movie_Id")
    private Movies movies;

    @Column
    private int rating;
    @Column
    private String comment;

    public static Comment createComment(CommentDto dto,Movies movies){
        return new Comment(
                dto.getId(),
                movies,
                dto.getRating(),
                dto.getComment()
        );
    }

}
public class Movies {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int movie_Id;
    @Column
    private String title;
    @Column
    private String genres;

    public static Movies createMovies(MoviesDto dto){
        return new Movies(dto.getMovie_Id(), dto.getTitle(), dto.getGenres());
    }
}

CommentRepository

@Repository
public interface CommentRepository extends JpaRepository<Comment,Long> {
    
    @Query(value = "Select * " +
            "from comment " +
            "where movie_Id = :id",
            nativeQuery = true)
    List<Comment> findByMovieId(int id);
}

I want to create the value I sent you, not null


Solution

  • You are receiving null values in your CommentDto object because you are not using the right annotation @RequestBody in your controller. You are using an annotation from swagger instead of spring. You have to change the import line in CommentApiController from import io.swagger.v3.oas.annotations.parameters.RequestBody to the one from Spring import org.springframework.web.bind.annotation.RequestBody.

    Hope it helps!