programing

콘텐츠 유형 'contentart/form-data;content=-----...;charset=UTF-8'은 지원되지 않습니다.

instargram 2023. 2. 26. 09:02
반응형

콘텐츠 유형 '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

반응형