![](/img/trans.png)
[英]Parsing multipart/form-data using Apache Commons File Upload
[英]trouble parsing multipart/form-data (not file upload) with spring-mvc 4.1
我需要在spring-mvc控制器中解析多部分請求。 春季版本為4.1.6。 請求示例:
HEADER host: "localhost:8080"
HEADER accept: "*/*"
HEADER content-length: "539"
HEADER expect: "100-continue"
HEADER content-type: "multipart/form-data; boundary=------------------------2e2bf5fa2f7bbfbf"
BODY:
--------------------------2e2bf5fa2f7bbfbf
Content-Disposition: form-data; name="objectid"
160714.110239.GG
--------------------------2e2bf5fa2f7bbfbf--
Content-Disposition: form-data; name="geojson"
[a very long json string]
--------------------------2e2bf5fa2f7bbfbf
請求的確切格式不受我的控制。
只要我使用整個@RequestBody,我的RequestMapping就可以解決:
@RequestMapping(value = "/coordinates", method = RequestMethod.POST)
public @ResponseStatus(value = HttpStatus.OK)
void coordinates(final HttpServletRequest request,
final @RequestBody String body) {
final Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
final String element = headerNames.nextElement();
System.out.println("HEADER " + element + ": \"" + request.getHeader(element) + "\"" );
}
System.out.println("BODY:");
System.out.println(body);
}
但是,當我更改簽名以直接獲取零件時,客戶端會收到一條錯誤消息,提示“不存在必需的String參數'objectid'”,並且我的映射也不再解析(已使用斷點進行了測試)。 這是失敗的代碼:
@RequestMapping(value = "/coordinates", method = RequestMethod.POST)
public @ResponseStatus(value = HttpStatus.OK)
void coordinates(final HttpServletRequest request,
final @RequestParam("objectid") String objectid,
final @RequestParam("geojson") String geojson) {
final String remoteAddr = request.getRemoteAddr();
System.out.println("coordinates from " + remoteAddr
+ ":\nobjectid=" + objectid
+ "\ngeojson=" + geojson);
}
我究竟做錯了什么 ?
由於您是使用POST方法提交數據的,因此多部分內容將作為請求參數而不是進入請求主體。
在第二種情況下,您使用請求參數對象進行了注釋,spring將檢查請求url中的參數。 如果其不可用,彈簧將引發錯誤。 此外,您可以將request參數設為可選參數,也可以提供默認值
解決。
我的彈簧配置中缺少一件事:
<bean id="multipartResolver"
class="org.springframework.web.multipart.support.StandardServletMultipartResolver">
<property name="maxUploadSize" value="100000"/>
</bean>
使用該解析器,@ RequestParam批注(如我的第二個Java源示例所示)可以工作。 是的,它是@RequestParam,盡管這些值不是URL的一部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.