콘텐츠 유형 'contentart/form-data;content=-----...;charset=UTF-8'은 지원되지 않습니다.
파일이 포함된 여러 목록과 일반 텍스트가 포함된 여러 필드가 있는 컨트롤러로 개체를 보내고 싶습니다.
public class ContributionNew<T extends MovieInfoDTO> {
private List<T> elementsToAdd;
private Map<Long, T> elementsToUpdate;
private Set<Long> idsToDelete;
private Set<String> sources;
private String comment;
}
public class Photo extends MovieInfoDTO {
private MultipartFile photo;
}
@PostMapping(value = "/{id}/contributions/photos")
@ResponseStatus(HttpStatus.CREATED)
public
ResponseEntity<Void> createPhotoContribution(
@ApiParam(value = "The movie ID", required = true)
@PathVariable("id") final Long id,
@ApiParam(value = "The contribution", required = true)
@RequestBody @Valid final ContributionNew<Photo> contribution
) {
우체부를 이용하여 데이터를 보냅니다.하지만 그는 나를 버린다.
org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'multipart/form-data;boundary=----WebKitFormBoundarywY7ByvgonAjDoaCT;charset=UTF-8' not supported
일반 텍스트 필드와 목록과 파일을 함께 가진 개체를 보내려면 이 컨트롤러의 내용 유형을 설정해야 합니다.
헤더에 헤더를 설정하면
Content-type: multipart/form-data; charset=utf-8
그것은 나를 콘솔로 던진다.
org.apache.tomcat.util.http.fileupload.FileUploadException: the request was rejected because no multipart boundary was found
전술한 바와 같이 dknight @RequestBody는 DTO bean 맵과 함께 JSON 또는 XML 데이터를 사용하는 것을 의미합니다.MultipartFile의 경우 JSON 데이터를 사용할 수 없으므로 @RequestBody를 사용할 수 없습니다.@ModelAttribute 주석을 사용해 보십시오.
작업 샘플:
@PostMapping("/promoters")
@Timed
public ResponseEntity<PromoterDTO> createPromoter(@ModelAttribute PromoterDTO promoterDTO) throws URISyntaxException { ... }
프로모터와 함께DTO는 다음과 같습니다.
public class PromoterDTO implements Serializable {
private Long id;
private String name;
private String address;
private MultipartFile logo;
}
Postman에서는 본문을 raw 타입으로 설정해야 하며, 드롭다운에서 JSON을 선택할 수 있습니다.이것에 의해, 같은 문제가 발생했기 때문에 문제가 해결되었습니다.
대신@RequestBody
,사용하다@RequestParam
!
@ResponseBody 대신 @ModelAttribute를 사용합니다.이는 키 값 쌍의 데이터를 차지하기 때문에 json과 같은 오브젝트에 사용됩니다.api를 누르면서 오브젝트의 멀티파트 타입과 json 키 값의 쌍을 전달하기만 하면 됩니다.잘 된다!
@RequestBody 대신 다음과 같은 @ModelAttribute를 사용합니다.
@PostMapping(value = "/{id}/contributions/photos")
@ResponseStatus(HttpStatus.CREATED)
public
ResponseEntity<Void> createPhotoContribution(
@ApiParam(value = "The movie ID", required = true)
@PathVariable("id") final Long id,
@ApiParam(value = "The contribution", required = true)
@ModelAttribute @Valid final ContributionNew<Photo> contribution
) {
import org.springframework.web.bind.annotation.ModelAttribute;
사용하다@ModelAttribute
대신@RequestBody
.그것은 나에게 효과가 있었다.
생성 = {application/json}이(가) 소비되는 대신 컨트롤러에 기록되어야 함 = {application/json}
안녕하세요. @RequestBody를 @ModelAttribute로 변경합니다.
public ResponseEntity<DTO> exemple(@ModelAttribute Dto dto) throws TechnicalException
해피 코딩.
다음은 Spring Boot 2.1.7을 사용하여 Kotlin으로 작성된 풀코드 샘플입니다.
예에서는ProfileRepository
물론 당신이 실행하는 것이겠죠.
코틀린은 착해 왜냐면data class
는 이미 시리얼 가능한 기능을 실장하고 있습니다.
주의해 주세요.var
것은 아니다.val
그렇지 않으면 로그 메시지에서 필드 값이 null이 됩니다.
import org.springframework.web.bind.annotation.ModelAttribute
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RestController
import org.springframework.web.multipart.MultipartFile
@RestController
class ExampleController(private val myProfileRepository: ProfileRepository) {
@PostMapping("/api/uploadFile")
fun createProvider(@ModelAttribute request: CreateProfileRequest): Provider {
println("received create request with photo: ${request.photo} for the following person ${request.name}")
return myProfileRepository.save(Provider(name = request.name!!))
}
}
data class CreateProfileRequest(
var name: String? = null,
var photo: MultipartFile? = null
)
언급URL : https://stackoverflow.com/questions/48051177/content-type-multipart-form-databoundary-charset-utf-8-not-supported
'programing' 카테고리의 다른 글
AngularJS에서 동적 템플릿을 사용하여 디렉티브를 작성하려면 어떻게 해야 합니까? (0) | 2023.03.03 |
---|---|
MUI를 사용하는 CSS 의사 실렉터 (0) | 2023.03.03 |
spread 연산자 vs array.concat() (0) | 2023.02.26 |
본문을 유효한 json으로 읽는 방법 (0) | 2023.02.26 |
TypeScript 오류 "The operand of a 'delete' operand of a operator is optional?"의 배후에 있는 논리는 무엇입니까? (0) | 2023.02.26 |