java - spring 4 Controller @RequestBody参数

标签 java spring spring-mvc

我有以下情况

public class MyCustomForm {
  private MyCustomType a;
  private MyCustomType b;
}

@RestController
public class AController {
  @RequestMapping(...)
  public void myMethod(@RequestBody MyCustomForm form){
    ...
  }
}

我想在 POST 请求中发送必要的数据来填写表格。问题是 MyCustomType 是一种复杂的数据类型,无法从 JSON 反序列化。

我尝试的第一件事是编写一个 PropertyEditor,以便 Spring 知道如何从字符串进行反序列化。如果我在 @RequestBody 之外使用其他任何东西,这个解决方案就有效(例如,它与 @PathVariable 一起使用)。

我做了一些研究,@RequestBody 不工作的原因是因为这个注解生成了一个使用它自己的反序列化规则的代理。这些规则不会干扰自定义 PropertyEditor

接下来我尝试的是使用自定义 Converter。此方案仍未解决问题。

还有其他想法吗?

我知道最新版本的 jackson(第 2 版)会知道自定义 ConverterPropertyEditor 但更新我的 jackson 映射器并不是真正的解决方案我的情况。

最佳答案

您可以使用 @JsonDeserialize对于你的 MyCustomType

public class MyCustomForm {
  @JsonDeserialize(using = MyCustomTypeDeserializer.class)
  private MyCustomType a;
  @JsonDeserialize(using = MyCustomTypeDeserializer.class)
  private MyCustomType b;
}

一些引用资料:

https://fasterxml.github.io/jackson-databind/javadoc/2.3.0/com/fasterxml/jackson/databind/annotation/JsonDeserialize.html

http://www.davismol.net/2015/06/05/jackson-using-jsonserialize-or-jsondeserialize-annotation-to-register-a-custom-serializer-or-deserializer/

http://www.baeldung.com/jackson-custom-serialization

关于java - spring 4 Controller @RequestBody参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35041953/

相关文章:

java - 验证 Thymeleaf 中的输入

java - 在 Spring 中将服务 bean Autowiring 到 XML 定义的 bean 中

java - Scala 的类转为 Java

java - Thymeleaf if + 每个订单

java - 如何通过 Flash 文件超链接网页

java - 在没有 Spring 的情况下注入(inject)应用程序属性

java - Spring MVC 和 jackson 不支持内容类型 'application/json'

java - 在 Spring 为 excel 生成运行一个短暂的后台任务

java - 哪些 JVM 选项优先?

java - 使用命令行参数覆盖 spring-boot 中的 yml 配置不起作用