【问题标题】:Jackson cannot deserialize facebook webhookJackson 无法反序列化 facebook webhook
【发布时间】:2017-06-26 16:32:18
【问题描述】:

我在我的 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;行:1,列:1];嵌套异常是 com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize of java.lang.String out of START_OBJECT token 在 [来源:java.io.PushbackInputStream@60a118dc;行:1,列:1]

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

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

您知道如何使用 jackson 和 hibernate 反序列化 facebook webhook 吗?

【问题讨论】:

    标签: json facebook hibernate jackson


    【解决方案1】:

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

    @RequestBody final Message payload
    

    如果相应的结构匹配,Jackson 将从负载中创建一个 Message 对象(您可能需要为 Jackson 进行额外配置)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-14
      • 2016-04-25
      • 2020-09-25
      • 1970-01-01
      • 1970-01-01
      • 2015-10-02
      • 2015-03-13
      • 1970-01-01
      相关资源
      最近更新 更多