Automatische Konvertierung von JSON-Formularparametern in Spring MVC 4.0
Ich versuche, einen Spring MVC-Controller zu erstellen, der ein POST-Formular mit einem Parameter im JSON-Format empfängt und von Spring automatisch in ein Java-Objekt konvertiert.
Anforderungsinhaltstyp istapplication/x-www-form-urlencoded
Der Name des Parameters, der eine JSON-Zeichenfolge enthält, lautetdata.json
Dies ist der Controller:
@Controller
public class MyController {
@RequestMapping(value = "/formHandler", method = RequestMethod.POST)
public @ResponseBody String handleSubscription(
@RequestParam("data.json") MyMessage msg) {
logger.debug("id: " + msg.getId());
return "OK";
}
}
Und so sieht das MyMessage-Objekt aus:
public class MyMessage {
private String id;
// Getter/setter omitted for brevity
}
Es überrascht vielleicht nicht, dass das Senden eines Formulars mit dem Parameter data.json = {"id": "Hello"} den HTTP-Fehler 500 mit der folgenden Ausnahme zur Folge hat:
org.springframework.beans.ConversionNotSupportedException:
Failed to convert value of type 'java.lang.String' to required type 'MyMessage'
nested exception is java.lang.IllegalStateException:
Cannot convert value of type [java.lang.String] to required type [MyMessage]: no matching editors or conversion strategy found
Wenn ich das leseMappingJackson2HttpMessageConverter-Dokumente korrekterweise wird die Jackson JSON-Konvertierung von Content-Type ausgelöstapplication/json
, was ich natürlich nicht verwenden kann, da es sich um ein POST-Formular handelt (und ich den POST-Teil nicht kontrolliere).
Ist es möglich, dass Spring den JSON-String in eine Instanz von MyMessage konvertiert, oder sollte ich einfach aufgeben, ihn als String lesen und die Konvertierung selbst durchführen?