복붙노트

[SPRING] 'org.springframework.web.multipart.commons.CommonsMultipartFile'유형의 값을 필수 유형으로 변환하는 데 실패했습니다.

SPRING

'org.springframework.web.multipart.commons.CommonsMultipartFile'유형의 값을 필수 유형으로 변환하는 데 실패했습니다.

내가 컨트롤러 방법을 다음과 같습니다 :

@RequestMapping(value = "/owner/terminals/save", method = RequestMethod.POST)
public String saveTerminal( @RequestParam(value = "name") String name, 
                            @RequestParam(value = "file") @Valid OnlyForImagesFileWrapper file,
                               BindingResult bindingResult )
             {
                ...

그리고 나는 다음 stacktrace를 본다.

    org.springframework.beans.ConversionNotSupportedException: Failed to convert value of type 'org.springframework.web.multipart.commons.CommonsMultipartFile' to required type 'com.terminal.domain.validation.OnlyForImagesFileWrapper'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [org.springframework.web.multipart.commons.CommonsMultipartFile] to required type [com.terminal.domain.validation.OnlyForImagesFileWrapper]: no matching editors or conversion strategy found
        at           org.springframework.beans.TypeConverterSupport.doConvert(TypeConverterSupport.java:74)
        ....
        Caused by: java.lang.IllegalStateException: Cannot convert value of type [org.springframework.web.multipart.commons.CommonsMultipartFile] to required type [com.terminal.domain.validation.OnlyForImagesFileWrapper]: no matching editors or conversion strategy found
            at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:267)
            ... 71 more

OnlyForImagesFileWrapper 소스 :

public class OnlyForImagesFileWrapper {
    @Extensions(imageFormats = {".jpg",".png",".gif",".bmp"}, videoFormats = {})
    private MultipartFile multipartFile;
    ...
}

문제를 피하는 방법?

멀티 파트 파일에 대해이 컨트롤러 메서드에 대한 변환 정치를 어디에서 설정할 수 있습니까?

추신

내 사용자 정의 initbinder 작성하려고 :

@InitBinder
    public void initBinder(WebDataBinder binder) {
        binder.registerCustomEditor(CommonsMultipartFile.class, new PropertyEditorSupport() {
            @Override
            public void setValue(Object file) {
                setValue(new OnlyForImagesFileWrapper((MultipartFile) file));
            }
        });
    }

그러나이 방법은 양식을 제출할 때 호출되지 않으며 위에서 언급 한 stacktrace를 참조하십시오.

추신

M. Deinum 명령어 실행 후 결과 (saveTerminal 메소드 내부에있을 때) :

또한 initbinder 메소드가 호출되지 않는 것으로 나타났습니다.

내 코드에 대한 자세한 내용 (M. Denim의 조언 이후의 상태) :

JSP :

<input type="file" id="newFile" name="file" class="file" size="21.5" accept=".jpg,.png,.gif,.bmp" style="opacity: 0;">

컨트롤러 메소드의 인수 :

...
@ModelAttribute @Valid OnlyForImagesFileWrapper wrapper,
                               BindingResult bindingResult,
...

해결법

  1. ==============================

    1.내가 너에게 논평 한 것처럼 너는 너무 복잡한 일을하고있다. 랩퍼를 다음과 같이 변경하십시오 (적절한 getter 및 setter 사용).

    내가 너에게 논평 한 것처럼 너는 너무 복잡한 일을하고있다. 랩퍼를 다음과 같이 변경하십시오 (적절한 getter 및 setter 사용).

    public class OnlyForImagesFileWrapper {
        @Extensions(imageFormats = {".jpg",".png",".gif",".bmp"}, videoFormats = {})
        private MultipartFile file;
        private String name;
    ...
    }
    

    그런 다음 컨트롤러 메서드

    @RequestMapping(value = "/owner/terminals/save", method = RequestMethod.POST)
    public String saveTerminal( @ModelAttribute @Valid OnlyForImagesFileWrapper wrapper, BindingResult bindingResult ) { ... }
    

    그리고 물론 구성에서 MultipartFileResolver가 참조 설명서에 설명 된대로 MultipartFile 인수를 올바르게 처리하도록 구성되어 있는지 확인하십시오.

  2. from https://stackoverflow.com/questions/30005724/failed-to-convert-value-of-type-org-springframework-web-multipart-commons-commo by cc-by-sa and MIT license