如何定义一个控制器方法来接受一个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'模特:
我正在尝试从前端获取一个 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'模特: