如何定义一个控制器方法来接受一个JSON,它的媒体类型是Spring Boot?

How to define a controller method as to accept a JSON that have a media type filed with Spring Boot?

我正在尝试从前端获取一个 Json 对象。这代表一门课程。球场有一个场地标志,球场的形象。在我的控制器中,我有以下方法:

@PostMapping(value="/register-course", consumes = "multipart/form-data" )
    public Response courseCreated(@RequestBody @Valid CourseCreatedRequest courseCreatedRequest, @RequestPart(value = "logo") MultipartFile file) throws IOException {
        return Response.ok().setPayload(registerCours(courseCreatedRequest, file));
    }

        private CourseDto registerCours(CourseCreatedRequest courseCreatedRequest, MultipartFile file) throws
        IOException {
            CourseDto courseDto = new CourseDto()
                    .setCourseName(courseCreatedRequest.getCourseName())
                    .setCourseDescription(courseCreatedRequest.getCourseDescription())
                    .setCoursePrice(courseCreatedRequest.getCoursePrice())
                    .setIsCourseActive(courseCreatedRequest.getIsCourseActive())
                    .setIsCourseFree(courseCreatedRequest.getIsCourseFree())
                    .setLogo(file.getBytes());

            return courseService.createNewCourse(courseDto);
        }

在服务层中,我有压缩(在数据库中保留图像时)和取消压缩(渲染图像时)的逻辑:

@PrePersist
public CourseDto createNewCourse(CourseDto newCourseDto) {

    Courses course = courseRepositoryDao.findByCourseName(newCourseDto.getCourseName());
    if (course == null) {

        course = new Courses()
                .setCourseName(newCourseDto.getCourseName())
                .setCourseDescription(newCourseDto.getCourseDescription())
                .setCoursePrice(newCourseDto.getCoursePrice())
                .setIsCourseFree(newCourseDto.getIsCourseFree())
                .setIsCourseActive(newCourseDto.getIsCourseActive())
                .setLogo(compressZLib(newCourseDto.getLogo()))
        ;
        return CourseMapper.toUserDtoFreeCourses(courseRepositoryDao.save(course));
    }
    throw exception(EntityType.NEWCOURSE, ExceptionType.DUPLICATE_ENTITY, newCourseDto.getCourseName());
}

当我通过 POSTMAN 发送带有徽标字段的 JSON 作为图像文件时,我收到 415 错误 - 不支持的媒体类型。

我哪里错了?我认为我需要更换我的控制器,但是如何更换? 我需要以某种方式使用 MultipartFile class?

从 JSON 中获取图像

更新: 我在正文中发送了 JSON 和一个文件,我认为这是问题所在。我需要将 MultipartFile 放入控制器中。

我已经关注了其他答案,但仍然是 415 错误。在邮递员中,我让 Content-Type 没有任何价值。

对我来说,我是如何做类似的事情的: 在后端(Spring):

@PostMapping(path = "/{your-route-goes-here}", consumes = "multipart/form-data")
public Course addCourse(@RequestPart(required = false, name = "file") MultipartFile file,  @RequestPart("course") Course course) {

    // do stuff here
}

在前端javascript(http请求使用axios):

   const course = {
      "property": "value"
   }

  const formData = new FormData();
  formData.append("file", file);
  formData.append("course", course);
  
  axios
    .post("/your-route-goes-here", formData)

  // etc

请查看图片以供参考:

后端:

邮递员:

'Course'模特: