[SPRING] Spring MVC : 필요한 매개 변수가있는 경우에도 파일 업로드에 잘못된 요청 (매개 변수 누락) 발생
SPRINGSpring MVC : 필요한 매개 변수가있는 경우에도 파일 업로드에 잘못된 요청 (매개 변수 누락) 발생
파일 업로드 컨트롤러에 다음과 같은 메서드가 있습니다.
@RequestMapping(value = "/upload", method = RequestMethod.POST, produces = {"*/*", "application/json"})
public @ResponseBody ScriptUploadResponse upload(@RequestParam("userId") Long userId, @RequestParam("script") MultipartFile file) {
return scriptService.upload(userId, file);
}
이것은 스프링 3에서 XML 기반 설정을 사용하여 잘 작동했다. 최근 스프링 4로 자바 기반 설정으로 넘어갔습니다. 파일을 업로드 할 때 userId가 제공되지 않았다는 불만과 함께 400 : Bad 요청이 발생합니다. 그러나 브라우저에서 요청을 볼 때 이것은 내가 보는 것입니다.
------WebKitFormBoundaryoJhTJ817NockqUSY
Content-Disposition: form-data; name="userId"
1
------WebKitFormBoundaryoJhTJ817NockqUSY
Content-Disposition: form-data; name="script"; filename="script.js"
Content-Type: application/javascript
------WebKitFormBoundaryoJhTJ817NockqUSY--
봄 주장 :
페이로드에 그것이 존재한다고 표시 될 때 userId를 제공하지 않았다는 이유는 무엇입니까?
최신 정보
RequestParamMethodArgumentResolver.java (내부 스프링 클래스) 안에 중단 점을 넣었고 HttpServletRequest 객체의 getParts ()가 아무 것도 반환하지 않는 것을 볼 수 있습니다. 왜 이런 일이 일어나고 있는지 모르겠지만 문제의 근원 인 것 같습니다. 브라우저에서 요청이 만들어 졌음을 알 수 있지만, 어떤 이유로 든 멀티 파트 데이터는이를 처리하지 못합니다.
해결법
-
==============================
1.나는 이것을 알아낼 수 있었다. 멀티 파트 파일에 대한 지원을 사용하려면 특정 방식으로 구성해야합니다. 이것에 대한 문서는 절망적으로 발견하기가 어려웠으며 이것에 관한 Spring의 문서는 불완전하거나 XML 기반의 설정과 관련이있는 것으로 보인다. 내가 잘못된 장소에서 무엇을 찾고 있는지 잘 모르겠다.하지만 구글을 사용해도 이것을 설정하는 방법을 설명하는 단일 장소를 찾을 수 없었다. 어쨌든, 여기 있습니다.
나는 이것을 알아낼 수 있었다. 멀티 파트 파일에 대한 지원을 사용하려면 특정 방식으로 구성해야합니다. 이것에 대한 문서는 절망적으로 발견하기가 어려웠으며 이것에 관한 Spring의 문서는 불완전하거나 XML 기반의 설정과 관련이있는 것으로 보인다. 내가 잘못된 장소에서 무엇을 찾고 있는지 잘 모르겠다.하지만 구글을 사용해도 이것을 설정하는 방법을 설명하는 단일 장소를 찾을 수 없었다. 어쨌든, 여기 있습니다.
먼저 웹 구성에 bean을 포함시켜야합니다. 간단히 WebMvcConfigurerAdapter를 확장 한 구성 클래스에 다음을 추가했습니다.
@Bean public MultipartResolver multipartResolver() { return new StandardServletMultipartResolver(); }
그러나 이것으로는 충분하지 않습니다. Servlet 3.0을 사용하고 Java 기반 구성을 사용하는 경우 다중 파트 파일을 지원하도록 Dispatcher 서블릿을 구성해야합니다.
내 이니셜 라이저 (WebApplicationInitializer를 확장)에 다음 클래스를 추가했습니다.
dispatcher.setMultipartConfig( new MultipartConfigElement("/tmp", 25 * 1024 * 1024, 125 * 1024 * 1024, 1 * 1024 * 1024) );
전체 메서드는 다음과 같이 끝납니다.
@Override public void onStartup(ServletContext servletContext) { AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext(); rootContext.register(ApplicationConfig.class, WebConfig.class); servletContext.addListener(new ContextLoaderListener(rootContext)); //Spring security servletContext.addFilter("springSecurityFilterChain", new DelegatingFilterProxy("springSecurityFilterChain")).addMappingForUrlPatterns(null, false, "/*"); //Enable multipart support ServletRegistration.Dynamic dispatcher = servletContext.addServlet("DispatcherServlet", new DispatcherServlet(rootContext)); dispatcher.setLoadOnStartup(1); dispatcher.addMapping("/"); dispatcher.setMultipartConfig( new MultipartConfigElement("/tmp", 25 * 1024 * 1024, 125 * 1024 * 1024, 1 * 1024 * 1024) ); }
from https://stackoverflow.com/questions/25109945/spring-mvc-bad-request-parameter-missing-on-file-upload-even-when-required-pa by cc-by-sa and MIT license