use*_*357 5 java dialogflow-es
我正在将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
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-dialogflow</artifactId>
<version>v2-rev2-1.23.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
目的:这样我就不必自己解析/构建json了,我已经在mvnrepository搜索中找到了它
我截获了这个json:
{
"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"
}
Run Code Online (Sandbox Code Playgroud)
杰克逊无法以某种方式绑定模型。我如何使用一些Java库,这样我就不必自己解析json了?
com.fasterxml.jackson.databind.JsonMappingException:无法将com.google.api.services.dialogflow.v2.model.GoogleCloudDialogDialogV2QueryResult字段com.google.api.services.dialogflow.v2.model.GoogleCloudDialogflowV2WebhookRequest.queryResult设置为java.util .LinkedHashMap(通过参考链:com.google.api.services.dialogflow.v2.model.GoogleCloudDialogflowV2WebhookRequest [“ queryResult”])
@RequestMapping(method = RequestMethod.POST, path = "fulfillment", consumes = MediaType.APPLICATION_JSON_VALUE)
public GoogleCloudDialogflowV2WebhookResponse getFulfillment(@RequestBody GoogleCloudDialogflowV2WebhookRequest request) {
// HttpMessageNotReadableException
...
Run Code Online (Sandbox Code Playgroud)
小智 3
该库取决于 google-api-client。它有一个用于传输对象的自定义 json 解析器(如 GoogleCloudDialogflowV2WebhookRequest)。这些对象从地图延伸出来。它们的元素都标有 Key 注释。这就是普通的 jackson 或 gson 解析器失败的原因。您有多种选择:
禁用端点的 spring 消息转换器并自行进行编组,如下所示:
import com.google.api.client.json.JsonGenerator;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.dialogflow.v2.model.*;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Mono;
import java.io.IOException;
import java.io.StringWriter;
import java.util.Collections;
@RestController
public class DialogflowWebhookController {
private static JacksonFactory jacksonFactory = JacksonFactory.getDefaultInstance();
@PostMapping("/dialogflow")
public Mono<String> webhook(@RequestBody String rawRequest) throws IOException {
GoogleCloudDialogflowV2WebhookRequest request = jacksonFactory.createJsonParser(rawRequest)
.parse(GoogleCloudDialogflowV2WebhookRequest.class);
StringWriter stringWriter = new StringWriter();
JsonGenerator jsonGenerator = jacksonFactory.createJsonGenerator(stringWriter);
GoogleCloudDialogflowV2WebhookResponse response = ...
jsonGenerator.serialize(response);
jsonGenerator.flush();
return Mono.just(stringWriter.toString());
}
}
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
1316 次 |
| 最近记录: |