首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java Webhook -迁移到v2 -无法将queryResult设置为java.util.LinkedHashMap

Java Webhook -迁移到v2 -无法将queryResult设置为java.util.LinkedHashMap
EN

Stack Overflow用户
提问于 2018-03-26 03:33:52
回答 1查看 1.8K关注 0票数 5

我正在使用dialogflow v1和spring boot java作为webhook,使用:http://mvnrepository.org/artifact/ai.api/libai/1.6.12

现在我尝试使用以下命令升级到dialogflow v2:http://mvnrepository.org/artifact/com.google.apis/google-api-services-dialogflow/v2-rev2-1.23.0

代码语言:javascript
复制
<dependency>
    <groupId>com.google.apis</groupId>
    <artifactId>google-api-services-dialogflow</artifactId>
    <version>v2-rev2-1.23.0</version>
</dependency>

目的:这样我就不必自己解析/构建json了,我是通过mvnrepository搜索找到它的。

我截获了这个json:

代码语言:javascript
复制
{
    "responseId": "72945ef4-0897-4705-a770-a12100162b45",
    "queryResult": {
        "queryText": "was gibts neues?",
        "action": "GetNewsFromWordpress",
        "parameters": {
            "allRequiredParamsPresent": true
        },
        "name": "projects/kreamont-abf6b/agent/intents/fe2c13a1-2e3f-48eb-a15a-660501c16807",
        "diagnosticInfo": {

        }
    },
    "languageCode": {
        "intentDetectionConfidence": 1.0
    },
    "displayName": {
        "payload": {

        }
    },
    "session": "projects/kreamont-abf6b/agent/sessions/e69aabe7-4f6a-4224-b881-8bbf31835ef2"
}           

杰克逊不知何故无法绑定模型。我怎样才能使用一些java库,这样我就不必自己去解析json了?

com.fasterxml.jackson.databind.JsonMappingException:无法(通过引用链: com.google.api.services.dialogflow.v2.model.GoogleCloudDialogflowV2WebhookRequest"queryResult") )将com.google.api.services.dialogflow.v2.model.GoogleCloudDialogflowV2QueryResult字段com.google.api.services.dialogflow.v2.model.GoogleCloudDialogflowV2WebhookRequest.queryResult设置为java.util.LinkedHashMap

代码语言:javascript
复制
@RequestMapping(method = RequestMethod.POST, path = "fulfillment", consumes = MediaType.APPLICATION_JSON_VALUE)
public GoogleCloudDialogflowV2WebhookResponse getFulfillment(@RequestBody GoogleCloudDialogflowV2WebhookRequest request) {
    // HttpMessageNotReadableException 
    ...
EN

回答 1

Stack Overflow用户

发布于 2018-09-23 07:02:02

该库依赖于google-api-client。它有一个为传输对象定制的json解析器(如GoogleCloudDialogflowV2WebhookRequest)。这些对象从地图延伸而来。它们的元素用Key注解标记。这就是正常的jackson或gson解析器失败的原因。您有多个选项:

  1. 复制和修改transfer对象(如果应用编程接口将来会更改,这是不好的)
  2. 为spring编写一个使用google api json解析器的httpmessageconverter (不知道这会有多大的工作量)
  3. 禁用端点的spring消息转换器,然后自己进行编组,如下所示:

导入;导入com.google.api.client.json.jackson2.JacksonFactory;导入com.google.api.services.dialogflow.v2.model.*;导入org.springframework.web.bind.annotation.PostMapping;导入org.springframework.web.bind.annotation.RequestBody;导入org.springframework.web.bind.annotation.RestController;导入reactor.core.publisher.Mono;导入java.io.IOException;导入java.io.StringWriter;导入java.util.Collections;@ .parse(GoogleCloudDialogflowV2WebhookRequest.class);公共类DialogflowWebhookController {私有静态映射jacksonFactory = JacksonFactory.getDefaultInstance();@PostMapping("/dialogflow")公共单声道webhook(@RequestBody String rawRequest)抛出请求{ GoogleCloudDialogflowV2WebhookRequest request = jacksonFactory.createJsonParser(rawRequest) RestController StringWriter stringWriter =jacksonFactory.createJsonParser StringWriter();JsonGenerator jsonGenerator =RestController GoogleCloudDialogflowV2WebhookResponse response = ...jsonGenerator.serialize(response);jsonGenerator.flush();return Mono.just(stringWriter.toString());} }

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49480084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档