Spring @RequestMapping反序列化器

时间:2014-10-09 06:04:23

标签: java json spring rest jackson

这就是我所拥有的:

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的每个其他端点都应使用默认。如何实现这一目标?

2 个答案:

答案 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的子类型,以解析您班级的实际实例。

希望它有所帮助!