so senden Sie MultiValueMap, die eine Datei in eine POST-Anforderung an Frühlings-rest-web-Dienst?
Ich möchten, senden Sie eine POST-Anforderung, die ein file-und ein anderes benutzerdefiniertes Objekt mit restTemplate. Ich habe versucht den code unten, aber es nicht so funktioniert, wie es ist, fehlt eine HtttpMessageConverter
für java.io.File
Ist MultiValueMap die richtige Wahl zu senden, die beide Objekte in einer Anforderung? Wenn nicht, irgendwelche Vorschläge? Wenn ja, dann wie bekomme ich die message converter problem lösen?
Client (verabschiedet von hier und hier):
RestTemplate rest = new RestTemplate();
HttpMessageConverter formHttpMessageConverter = new FormHttpMessageConverter();
HttpMessageConverter stringHttpMessageConverternew = new StringHttpMessageConverter();
List<HttpMessageConverter<?>> conv = new ArrayList<HttpMessageConverter<?>> ();
conv.add(formHttpMessageConverter);
conv.add(stringHttpMessageConverternew);
rest.setMessageConverters(conv);
MultiValueMap<String, Object> map = new LinkedMultiValueMap<String, Object>();
File f = new File("testFile.txt");
map.add("file", f);
NewObject a = new NewObject("123", "xxx", "xxx",
"blahblah", "5432");
map.add("newObject", a);
String result = rest.postForObject("http://localhost:8080/test/upload", map, String.class);
System.out.println(result);
Controller:
@RequestMapping(value="/upload", method=RequestMethod.POST)
public @ResponseBody String uploadArtefact(@RequestBody MultiValueMap<String, Object> o)
{
logger.info("tesssting: " + o);
File x = (File) o.get("file").get(0);
logger.info("File name " + x.getName());
NewObject a = (NewObject) o.get("newObject").get(0);
logger.info("New Object: " + a);
return "finished";
}
Dies ist der Fehler, dass ich immer auf der client-Seite:
Exception in thread "main" org.springframework.http.converter.HttpMessageNotWritableException: Could not write request: no suitable HttpMessageConverter found for request type [java.io.File]
at org.springframework.http.converter.FormHttpMessageConverter.writePart(FormHttpMessageConverter.java:317)
at org.springframework.http.converter.FormHttpMessageConverter.writeParts(FormHttpMessageConverter.java:275)
at org.springframework.http.converter.FormHttpMessageConverter.writeMultipart(FormHttpMessageConverter.java:264)
at org.springframework.http.converter.FormHttpMessageConverter.write(FormHttpMessageConverter.java:204)
at org.springframework.http.converter.FormHttpMessageConverter.write(FormHttpMessageConverter.java:72)
at org.springframework.web.client.RestTemplate$HttpEntityRequestCallback.doWithRequest(RestTemplate.java:751)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:540)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:503)
at org.springframework.web.client.RestTemplate.postForObject(RestTemplate.java:331)
at uk.ac.ncl.rest.Test.main(Test.java:47)
und diese beiden Zeilen werden protokolliert, auf der server-Seite:
2015-02-24 16:44:14.772 WARN 38776 --- [nio-8080-exec-1] .c.j.MappingJackson2HttpMessageConverter : Failed to evaluate deserialization for type [map type; class org.springframework.util.MultiValueMap, [simple type, class java.lang.String] -> [collection type; class java.util.List, contains [simple type, class java.lang.Object]]]: com.fasterxml.jackson.databind.JsonMappingException: Can not find a deserializer for non-concrete Map type [map type; class org.springframework.util.MultiValueMap, [simple type, class java.lang.String] -> [collection type; class java.util.List, contains [simple type, class java.lang.Object]]]
2015-02-24 16:44:14.772 WARN 38776 --- [nio-8080-exec-1] .c.j.MappingJackson2HttpMessageConverter : Failed to evaluate deserialization for type [map type; class org.springframework.util.MultiValueMap, [simple type, class java.lang.Object] -> [collection type; class java.util.List, contains [simple type, class java.lang.Object]]]: com.fasterxml.jackson.databind.JsonMappingException: Can not find a deserializer for non-concrete Map type [map type; class org.springframework.util.MultiValueMap, [simple type, class java.lang.Object] -> [collection type; class java.util.List, contains [simple type, class java.lang.Object]]]
InformationsquelleAutor Sami | 2015-02-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verbringe ich so viel Zeit auf diesen Fehler!
FormHttpMessageConverter hat 3 Konverter für Teile:
Anstatt die Datei selbst, sollte man es als Ressource:
FileSystemResource ist im package org.springframework.core.io
InformationsquelleAutor ivanka