У меня есть контроллер, который получает определенную DTO в качестве параметра:Spring MVC - как пройти наследуя тип из JSP в контроллер
@Controller
public class MyController {
@RequestMapping(value = "/request", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseStatus(value = HttpStatus.OK)
@ResponseBody
public int processRequest(@RequestBody BaseRequestDTO baseRequestDTO, HttpServletRequest request) {
...
}
}
BaseRequestDTO имеет поле, скажем String a
.
У меня есть еще один DTO, который расширяет BaseRequestDTO - MyRequestDTO. MyRequestDTO также имеет поле, скажем String b
. Я пытаюсь передать MyRequestDTO от формы Jsp к контроллеру:
$.ajax({
type : "POST",
url : URL + "/request",
data : JSON.stringify(eval({
"a" : "hello",
"b" : "world"
})),
...
});
Теперь, когда я пытаюсь отправить параметры, которые я получаю эту ошибку:
Could not read JSON: Unrecognized field "b"
Потому что, очевидно, не BaseRequestDTO есть это поле.
EDIT: Преобразователи сообщений, которые определены в контексте приложения:
<property name="messageConverters">
<list>
<bean
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
</bean>
<bean class="org.springframework.http.converter.FormHttpMessageConverter" />
<bean
class="org.springframework.http.converter.StringHttpMessageConverter" />
</list>
</property>
Так как я могу передать тип наследуя (который имеет дополнительные поля для базового класса) в качестве параметра к контроллеру? Кто-нибудь знает об этом решении?
Можете ли вы указать jacksonMessageConverter, который вы определили в конфигурациях контекста приложения. –
См. Мой отредактированный пост. – Ayelet