Я пытаюсь построить Spring MVC-контроллер, который получит POSTED-форму с параметром в формате JSON, и Spring автоматически преобразует ее в объект Java.Автоматическое преобразование параметра формы JSON в Spring MVC 4.0
- тип запроса содержание
application/x-www-form-urlencoded
- Имя параметра, который содержит строку JSON является
data.json
Это контроллер:
@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";
}
}
И это то, что MyMessage объект выглядит так:
public class MyMessage {
private String id;
// Getter/setter omitted for brevity
}
Возможно, не удивительно, отправляя форму с параметром data.json = { "ID": "Hello"} приводит к ошибке HTTP 500 с этим исключением:
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
Если я прочитал MappingJackson2HttpMessageConverter docs правильно, Джексон JSON преобразование инициируется Content-Type application/json
, который я, очевидно, не могу использовать, поскольку это форма POST (и я не контролирую часть POSTing).
Возможно ли получить Spring для преобразования строки JSON в экземпляр MyMessage, или я должен просто отказаться от нее, прочитать ее как строку и выполнить преобразование самостоятельно?
й Я не контролирую POSTING part_ Вашего клиент должен следовать спецификациям сервера, а не наоборот. –
Клиент - это сторонний механизм webhook, который я не контролирую. Но ваше заявление вызывает у меня любопытство: есть ли что-то в спецификации HTTP, запрещающей отправку данных JSON с использованием параметра поля формы/сообщения? –
Нет, нет, но с REST это стало обычным иметь его в теле. –