【问题标题】:Spring MVC @RequestBody into an Interface instead of a classSpring MVC @RequestBody 变成一个接口而不是一个类
【发布时间】:2015-01-20 22:50:10
【问题描述】:

伙计们,

这段代码被剪断了:

@RequestMapping(method = RequestMethod.GET, produces = "application/json")
public ResponseEntity<List<Member>> findByMemberKeyOrUniqueMemberId(

请注意,“成员”是一个接口,而不是一个类。

这不起作用。

@RequestMapping(method = RequestMethod.POST)
public ResponseEntity<String> save(@RequestBody final List<Member> members) {

所以我可以将成员转换为 JSON,但我无法将 JSON 接收为成员。如果我将保存的参数从 List 更改为 Member 类之一的 List,那么它可以正常工作,但它确实会弄乱我的代码。

我该如何解决这个问题?

【问题讨论】:

  • 定义不起作用
  • 如果我尝试反序列化为成员,我会收到 400 Bad Request。如果我使用 Member 类,我会得到 200 OK 并且一切正常。

标签: java spring spring-mvc jackson


【解决方案1】:

Jackson 无法(这是不可行的)猜测使用哪个 Member 实现来反序列化 JSON。

Jackson 提供@JsonTypeInfo 来描述您的继承层次结构,并提供有关如何反序列化 JSON 的提示。但是,这需要您修改 JSON 并添加这些提示。这在文档here 中有解释。

【讨论】:

  • 据我所知,它可以确定使用哪个实现来序列化为 JSON,但它无法确定使用哪个实现来反序列化 JSON。对吗?
  • @techgnosis 对。对于序列化,它需要做的就是调用getClass() 并为该类型构建一个序列化程序。但是反序列化时(目前)没有这样的类型信息。
猜你喜欢
  • 1970-01-01
  • 2015-08-02
  • 1970-01-01
  • 2012-12-21
  • 2011-10-06
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
相关资源
最近更新 更多