这就是我所拥有的:
SomeController.java
@Controller
@RequestMapping(value = "/foo", produces = MediaType.APPLICATION_JSON_VALUE)
public class SomeController {
@RequestMapping(value = "/bar", method = RequestMethod.POST)
public @ResponseBody ResponseEntity<Resource<Baz>> createCampaign(@RequestBody Foobar foobar) {
...
}
}
现在,我需要为JsonDeserialiser
使用自定义foobar
,但仅针对此特定端点,其Foobar
作为其@RequestBody
的每个其他端点都应使用默认。如何实现这一目标?
答案 0 :(得分:0)
我无法想象另一种方法,而不是手工做事。将您的请求正文作为普通字符串获取并使用它调用自定义JsonDeserializer:
public @ResponseBody ResponseEntity<Resource<Baz>> createCampaign(@RequestBody String body) {
//do your custom deserialization
}
答案 1 :(得分:0)
与其他实例相比,此实例的反序列化有何不同?
您使用的是哪个版本的杰克逊?杰克逊2为反序列化提供了非常酷的东西。
第一个选项,您可以使用Jackson Builder自定义
@JsonDeserialize(builder = FooBarBuilder.class)
public class FooBar {
...
public static class FooBarBuilder() {
public FooBar build(){...}
}
}
第二个选项,如果您的实际FooBar是查看Handling polymorphic types的子类型,以解析您班级的实际实例。
希望它有所帮助!