杰克逊无法反序化facebook webhook

时间:2017-06-26 16:32:18

标签: json facebook hibernate jackson

我在我的spring-boot项目中使用Jackson和hibernate:

private MappingJackson2HttpMessageConverter jacksonMessageConverter() {
    MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();

    ObjectMapper mapper = new ObjectMapper();
    mapper.registerModule(new Hibernate4Module());
    messageConverter.setObjectMapper(mapper);
    return messageConverter;

}

并将其添加到转换器:

public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    converters.add(jacksonMessageConverter());

我使用facebook webhooks来回复有关messenger中新消息的信息:

public ResponseEntity<Void> handleCallback(@RequestBody final String payload,
        @RequestHeader(SIGNATURE_HEADER_NAME) final String signature) {

payload参数是一个字符串,但是jackson转换器无法反序列化它:

  

w.s.m.s.DefaultHandlerExceptionResolver:无法读取HTTP消息:org.springframework.http.converter.HttpMessageNotReadableException:无法读取文档:无法从START_OBJECT令牌中反序列化java.lang.String的实例    在[来源:java.io.PushbackInputStream@60a118dc; line:1,column:1];嵌套异常是com.fasterxml.jackson.databind.JsonMappingException:无法从START_OBJECT标记中反序列化java.lang.String的实例    在[来源:java.io.PushbackInputStream@60a118dc; line:1,column:1]

我试图删除JacksonMapper然后webhooks工作,但我的数据库没有:

  

org.hibernate.LazyInitializationException:无法初始化代理    - 没有会话

您是否知道如何使用jackson&amp; amp;来反序化facebook webhooks冬眠?

1 个答案:

答案 0 :(得分:0)

我知道您有POST个请求的处理程序方法,并且您希望使用spring-boot将请求的有效负载反序列化为指定类的对象,例如Message。在这种情况下,您需要handleCallback参数的语法:

@RequestBody final Message payload

如果相应的结构匹配(杰克逊可能需要额外的配置),杰克逊将从有效负载中创建一个Message对象。

使用当前语法,Jackson尝试将JSON有效负载反序列化为String对象,并且可能有效负载比这更复杂。