[SPRING] Spring 파일 업로드가 모델 속성 객체에 바인딩되지 않음
SPRINGSpring 파일 업로드가 모델 속성 객체에 바인딩되지 않음
Spring MVC를 사용하여 간단한 파일 업로드 기능을 만들고 싶습니다.
multipartResolver를 제자리에두고 작업하고 있습니다.
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10240000"/>
</bean>
파일을 업로드 할 때 기록됩니다 :
DEBUG:[org.springframework.web.multipart.commons.CommonsMultipartResolver]: Found multipart file [imageUpload] of size 29081 bytes with original filename [xyz.jpg], stored at [/home/myuser/workspace/myProject/target/tmp/upload_67f1107c_1b8f_402c_bebd_6cd8a6e4c830_00000032.tmp]
그것은 기본적으로 작동한다는 것을 말해줍니다.
이것은 내 JSP의 일부입니다.
<form:form modelAttribute="placeForm" action="/platz/save" method="post" cssClass="placeForm" enctype="multipart/form-data">
...
<label for="imageUpload">Upload</label>
<form:input type="file" path="imageUpload" id="imageUpload" accept="image/*" />
...
</form:form>
이것은 내 모델 속성 객체의 클래스입니다.
public class PlaceEditForm
{
@Valid
private Place place = new Place();
private Map<Integer, PlaceFeature> features;
private MultipartFile imageUpload;
... getter/setter omitted...
}
그리고 이것은 내 Controller 메소드의 일부입니다.
@RequestMapping(value="/save", method=RequestMethod.POST)
public String savePlace (@Valid @ModelAttribute("placeForm") PlaceEditForm form, BindingResult result)
{
logger.debug("saveNewPlace");
logger.debug("Upload: "+form.getImageUpload()); // null
...
return "redirect:/platz/"+place.getPlaceId();
}
폼 개체의 imageUpload 특성은 채워지지 않고 (null), 다른 모든 양식 속성은 채워지지 않습니다.
컨트롤러에서 이것을 사용할 때 작동한다는 것을 알았습니다.
@RequestMapping(value="/save", method=RequestMethod.POST)
public String savePlace (@Valid @ModelAttribute("placeForm") PlaceEditForm form, BindingResult result, @RequestParam("imageUpload") MultipartFile upload, BindingResult uploadResult)
{
logger.debug("saveNewPlace");
logger.debug("Upload: "+upload); // Works!!
...
return "redirect:/platz/"+place.getPlaceId();
}
따라서 MultipartFile을 @RequestParam으로 사용하는 것은 가능하지만 폼의 modelAttribute 객체에 바인딩하는 것은 아닙니다. 웹에서 수백 가지 예제를 발견했는데 그 차이는 거의 같지 않습니다.
나는 아직도 봄을 배우고있어, 아주 명백한 점을 놓칠지도 모른다. 컨트롤러의 두 번째 버전 만 사용할 수는 있지만 이해가되지 않습니다. 제가 말했던 것처럼 저는 배우고 있습니다.
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 보안 - 로그 아웃 리디렉션 사용 안함 (0) | 2019.05.05 |
---|---|
[SPRING] 어노테이션 기반 팩토리 메소드 (0) | 2019.05.05 |
[SPRING] Heroku에서 gradle로 빌드 된 Spring 애플리케이션 실행 (0) | 2019.05.05 |
[SPRING] NoSuchMethodError : org.springframework.beans.factory.xml.XmlReaderContext.getEnvironment () Lorg / springframework / core / env / Environment; zkoss 사용 (0) | 2019.05.05 |
[SPRING] Spring 3 @Component 및 정적 팩토리 메서드 (0) | 2019.05.05 |