gpt4 book ai didi

java - Spring MVC - 如何将继承类型从jsp传递到 Controller

转载 作者:行者123 更新时间:2023-12-02 06:15:42 26 4
gpt4 key购买 nike

我有一个 Controller ,它获取某个 DTO 作为参数:

@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

我有另一个扩展 BaseRequestDTO 的 DTO - MyRequestDTO。MyRequestDTO 还有一个字段,比方说 String b。我正在尝试将 MyRequestDTO 从 jsp 表单传递到 Controller :

$.ajax({
type : "POST",
url : URL + "/request",
data : JSON.stringify(eval({
"a" : "hello",
"b" : "world"
})),
...
});

现在,当我尝试发送参数时,出现此错误:

Could not read JSON: Unrecognized field "b"

因为显然 BaseRequestDTO 没有该字段。

编辑:在应用程序上下文中定义的消息转换器:

<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>

那么如何将继承类型(具有基类的附加字段)作为参数传递给 Controller ​​?有谁知道解决办法吗?

最佳答案

Jackson 对此提供了支持,请尝试在支持类中指定一个包含具体类型信息的属性:

@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="@class")
public abstract class BaseRequestDTO {
...
}

并在 JSON 上指定具体类型:

{
"@class" : "com.yourpackage.MyRequestDTO",
"a" : "hello",
"b" : "world"
}

关于java - Spring MVC - 如何将继承类型从jsp传递到 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21509973/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com