从 Java SpringBoot 中的 Google Dialogflow 获取原始响应 JSON
Get raw response JSON from Google Dialogflow in Java SpringBoot
我需要从我的 Java SpringBoot 应用程序 return 来自 Google Dialogflow API 的响应。 detectIntent()
API 的响应类型是 DetectIntentResponse
。然而,这个 class 会产生一个复杂的 JSON。 Dialogflow
创建的实际JSON在诊断工具中要简单得多。
有没有办法从 Dialogflow
API 获取实际的原始响应而不是解析 DetectIntentResponse
class 因为它保留了我的字段的长嵌套不想?
使用了 Google 中的示例代码 - https://github.com/googleapis/DetectIntentTexts.java
Dialogflow 诊断工具原始响应 -
参考 - dialogflow-reference-DetectIntentResponse
{
"responseId": "856510ca-f617-4e25-b0bb-a26c0a59e030-19db3199",
"queryResult": {
"queryText": "I know french",
"parameters": {
"language": "French",
"language-programming": ""
},
"allRequiredParamsPresent": true,
"fulfillmentText": "Wow! I didn't know you knew French. How long have you known French?",
"fulfillmentMessages": [
{
"text": {
"text": [
"Wow! I didn't know you knew French. How long have you known French?"
]
}
}
],
"outputContexts": [
{
"name": "projects/project-id/agent/sessions/123456789/contexts/set-language-followup",
"lifespanCount": 2,
"parameters": {
"language": "French",
"language.original": "french",
"language-programming": "",
"language-programming.original": ""
}
}
],
"intent": {
"name": "projects/project-id/agent/intents/fe45022f-e58a-484f-96e8-1cbd6628f648",
"displayName": "set-language"
},
"intentDetectionConfidence": 1,
"languageCode": "en"
}
}
我希望响应完全像这样,而不是 DetectIntentResponse
Java class 附带的所有额外字段 - 基本上删除所有未设置的字段和对象嵌套。
将 DetectIntentResponse
class 直接解析为 JSON -
的响应
query_result {
query_text: "testing testing 123 abc@gmail.com"
action: "test"
parameters {
fields {
key: "email"
value {
string_value: "abc@gmail.com"
}
}
fields {
key: "number-integer"
value {
list_value {
values {
number_value: 123.0
}
}
}
}
}
all_required_params_present: true
fulfillment_text: "testing invoked"
fulfillment_messages {
text {
text: "testing invoked"
}
}
output_contexts {
name: "projects/*****/agent/sessions/session-test/contexts/testing-context"
lifespan_count: 5
parameters {
fields {
key: "email"
value {
string_value: "abc@gmail.com"
}
}
fields {
key: "email.original"
value {
string_value: "abc@gmail.com"
}
}
fields {
key: "number-integer"
value {
list_value {
values {
number_value: 123.0
}
}
}
}
fields {
key: "number-integer.original"
value {
string_value: "123"
}
}
}
}
intent {
name: "projects/*****/agent/intents/*****"
display_name: "test"
}
intent_detection_confidence: 1.0
language_code: "en"
}
我需要删除 fields
、key
、value
、string_value
、list_value
和所有此类附加字段以获取原始文件原始响应。
在查阅了一些文档之后,我找到了完美的解决方案。
有一个 Google 库可以作为依赖项添加到应用程序中,它将 DetectIntentResponse
对象的响应解析为原始原始响应 JSON。
build.gradle
implementation 'com.google.protobuf:protobuf-java-util:4.0.0-rc-2'
detectIntent()
import com.google.protobuf.util.JsonFormat;
DetectIntentResponse response = sessionClient.detectIntent(session, queryInput);
return JsonFormat.printer().print(response);
我需要从我的 Java SpringBoot 应用程序 return 来自 Google Dialogflow API 的响应。 detectIntent()
API 的响应类型是 DetectIntentResponse
。然而,这个 class 会产生一个复杂的 JSON。 Dialogflow
创建的实际JSON在诊断工具中要简单得多。
有没有办法从 Dialogflow
API 获取实际的原始响应而不是解析 DetectIntentResponse
class 因为它保留了我的字段的长嵌套不想?
使用了 Google 中的示例代码 - https://github.com/googleapis/DetectIntentTexts.java
Dialogflow 诊断工具原始响应 - 参考 - dialogflow-reference-DetectIntentResponse
{
"responseId": "856510ca-f617-4e25-b0bb-a26c0a59e030-19db3199",
"queryResult": {
"queryText": "I know french",
"parameters": {
"language": "French",
"language-programming": ""
},
"allRequiredParamsPresent": true,
"fulfillmentText": "Wow! I didn't know you knew French. How long have you known French?",
"fulfillmentMessages": [
{
"text": {
"text": [
"Wow! I didn't know you knew French. How long have you known French?"
]
}
}
],
"outputContexts": [
{
"name": "projects/project-id/agent/sessions/123456789/contexts/set-language-followup",
"lifespanCount": 2,
"parameters": {
"language": "French",
"language.original": "french",
"language-programming": "",
"language-programming.original": ""
}
}
],
"intent": {
"name": "projects/project-id/agent/intents/fe45022f-e58a-484f-96e8-1cbd6628f648",
"displayName": "set-language"
},
"intentDetectionConfidence": 1,
"languageCode": "en"
}
}
我希望响应完全像这样,而不是 DetectIntentResponse
Java class 附带的所有额外字段 - 基本上删除所有未设置的字段和对象嵌套。
将 DetectIntentResponse
class 直接解析为 JSON -
query_result {
query_text: "testing testing 123 abc@gmail.com"
action: "test"
parameters {
fields {
key: "email"
value {
string_value: "abc@gmail.com"
}
}
fields {
key: "number-integer"
value {
list_value {
values {
number_value: 123.0
}
}
}
}
}
all_required_params_present: true
fulfillment_text: "testing invoked"
fulfillment_messages {
text {
text: "testing invoked"
}
}
output_contexts {
name: "projects/*****/agent/sessions/session-test/contexts/testing-context"
lifespan_count: 5
parameters {
fields {
key: "email"
value {
string_value: "abc@gmail.com"
}
}
fields {
key: "email.original"
value {
string_value: "abc@gmail.com"
}
}
fields {
key: "number-integer"
value {
list_value {
values {
number_value: 123.0
}
}
}
}
fields {
key: "number-integer.original"
value {
string_value: "123"
}
}
}
}
intent {
name: "projects/*****/agent/intents/*****"
display_name: "test"
}
intent_detection_confidence: 1.0
language_code: "en"
}
我需要删除 fields
、key
、value
、string_value
、list_value
和所有此类附加字段以获取原始文件原始响应。
在查阅了一些文档之后,我找到了完美的解决方案。
有一个 Google 库可以作为依赖项添加到应用程序中,它将 DetectIntentResponse
对象的响应解析为原始原始响应 JSON。
build.gradle
implementation 'com.google.protobuf:protobuf-java-util:4.0.0-rc-2'
detectIntent()
import com.google.protobuf.util.JsonFormat;
DetectIntentResponse response = sessionClient.detectIntent(session, queryInput);
return JsonFormat.printer().print(response);