Spring 3.2 に基づいて RESTful サービスを開発しています。XML または JSON 形式のデータを含む 2 番目の部分と、イメージ ファイルを含む 2 番目の部分を使用して、混合マルチパート HTTP 要求を処理するコントローラーで問題に直面しています。
リクエストの受信に@RequestPart アノテーションを使用しています
@RequestMapping(value = "/User/Image", method = RequestMethod.POST, consumes = {"multipart/mixed"},produces="applcation/json")
public
ResponseEntity<List<Map<String, String>>> createUser(
@RequestPart("file") MultipartFile file, @RequestPart(required=false) User user) {
System.out.println("file" + file);
System.out.println("user " + user);
System.out.println("received file with original filename: "
+ file.getOriginalFilename());
// List<MultipartFile> files = uploadForm.getFiles();
List<Map<String, String>> response = new ArrayList<Map<String, String>>();
Map<String, String> responseMap = new HashMap<String, String>();
List<String> fileNames = new ArrayList<String>();
if (null != file) {
// for (MultipartFile multipartFile : files) {
String fileName = file.getOriginalFilename();
fileNames.add(fileName);
try {
file.transferTo(new File("C:/" + file.getOriginalFilename()));
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
responseMap.put("displayText", file.getOriginalFilename());
responseMap.put("fileSize", "" + file.getSize());
response.add(responseMap);
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.add("Accept", "application/json");
return new ResponseEntity<List<Map<String, String>>>(response,
httpHeaders, HttpStatus.OK);
}
User.java は次のようになります。
@XmlRootElement(name = "User")
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private int userId;
private String name;
private String email;
private String company;
private String gender;
//getter setter of the data members
}
私の理解では、@RequestPart アノテーションを使用すると、XML マルチパート セクションがその Content-Type に応じて評価され、最終的に User クラスにアンマーシャリングされることが期待されます (私は Jaxb2 を使用しています。マーシャラー/アンマーラーは、 XML データを本文として渡し、@RequestBody アノテーションを使用すると、他のすべてのコントローラー メソッドでプロシージャが正常に動作します)。
しかし、実際に起こっていることは、ファイルが正しく検出され、MultipartFile として解析されたにもかかわらず、「ユーザー」部分が表示されず、要求が常に失敗し、コントローラー メソッドの署名と一致しないということです。
複数のクライアント タイプで問題を再現しましたが、マルチパート リクエストの形式は問題ないと確信しています。
この問題を解決するのを手伝ってください。混合/マルチパート リクエストを受け取るための回避策があるかもしれません。
よろしくお願いいたします。
ラグヴェンドラ