繁体   English   中英

spring 4 controller @RequestBody参数

[英]spring 4 controller @RequestBody parameter

我有以下情况

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM