gpt4 book ai didi

java - Spring RestTemplate.getForObject() 的 JSON 转换错误

转载 作者:行者123 更新时间:2023-12-01 09:53:02 25 4
gpt4 key购买 nike

我正在使用 Spring 的 RestTemplate 访问 Web 服务,并获取以下堆栈跟踪:

Exception in thread "main" org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Unrecognized field "ClientId" (class com.accesspoint.twctest.MidasCarrierServiceabilityResponse), not marked as ignorable (7 known properties: , "midasCarrierServiceabilityResult", "midasCarrierServiceabilityServiceReturnStatus", "clientId", "midasServiceResponseId", "currentPeriodRequestsUsed", "currentPeriodRequestsAvailable" [truncated]])
at [Source: sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@5e71a70b; line: 1, column: 14] (through reference chain: com.accesspoint.twctest.MidasCarrierServiceabilityResponse["ClientId"]); nested exception is com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "ClientId" (class com.accesspoint.twctest.MidasCarrierServiceabilityResponse), not marked as ignorable (7 known properties: , "midasCarrierServiceabilityResult", "midasCarrierServiceabilityServiceReturnStatus", "clientId", "midasServiceResponseId", "currentPeriodRequestsUsed", "currentPeriodRequestsAvailable" [truncated]])
at [Source: sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@5e71a70b; line: 1, column: 14] (through reference chain: com.accesspoint.twctest.MidasCarrierServiceabilityResponse["ClientId"])
at org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.readJavaType(MappingJackson2HttpMessageConverter.java:228)
at org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.read(MappingJackson2HttpMessageConverter.java:220)
at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:95)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:559)
at org.springframework.security.oauth2.client.OAuth2RestTemplate.doExecute(OAuth2RestTemplate.java:128)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:512)
at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:243)
at com.accesspoint.twctest.TwcTest.go(TwcTest.java:55)
at com.accesspoint.twctest.TwcTest.main(TwcTest.java:20)
Caused by: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "ClientId" (class com.accesspoint.twctest.MidasCarrierServiceabilityResponse), not marked as ignorable (7 known properties: , "midasCarrierServiceabilityResult", "midasCarrierServiceabilityServiceReturnStatus", "clientId", "midasServiceResponseId", "currentPeriodRequestsUsed", "currentPeriodRequestsAvailable" [truncated]])
at [Source: sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@5e71a70b; line: 1, column: 14] (through reference chain: com.accesspoint.twctest.MidasCarrierServiceabilityResponse["ClientId"])
at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:79)
at com.fasterxml.jackson.databind.DeserializationContext.reportUnknownProperty(DeserializationContext.java:579)
at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:672)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:906)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:328)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:121)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2796)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2002)
at org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.readJavaType(MappingJackson2HttpMessageConverter.java:225)
... 8 more

这是代码:

    ClientCredentialsResourceDetails resourceDetails = new ClientCredentialsResourceDetails();
String authServerUrl = "https://identserver.com";
resourceDetails.setAccessTokenUri(authServerUrl);
resourceDetails.setClientId("myId");
resourceDetails.setClientSecret("secretsecret");
resourceDetails.setGrantType("client_credentials");
resourceDetails.setScope(asList("scopescope"));

DefaultOAuth2ClientContext clientContext = new DefaultOAuth2ClientContext();

OAuth2RestTemplate restTemplate = new OAuth2RestTemplate(resourceDetails, clientContext);
HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
List<HttpMessageConverter<?>> converters = new ArrayList<>();
converters.add(converter);
restTemplate.setMessageConverters(converters);

String twcApiUrl = "https://contentserver.com"
+ "?trackingId=test"
+ "&clientId=myId"
+ "&address=605 W MAIN ST"
+ "&city=NEW LEBANON"
+ "&state=OH"
+ "&zip=45345";

final MidasCarrierServiceabilityResponse midasCarrierServiceabilityResultAddress
= restTemplate.getForObject(twcApiUrl, MidasCarrierServiceabilityResponse.class);
String s = midasCarrierServiceabilityResultAddress.toString();
System.out.println(s);

我还捕获了返回的 JSON:

{"ClientId":"myId",
"ClientTrackingId":"test",
"MidasServiceResponseId":"7b2f4123-8b65-4021-ac92-6756ce750ccd",
"CurrentPeriodRequestsUsed":5,
"CurrentPeriodRequestsAvailable":995,
"MidasCarrierServiceabilityServiceReturnStatus":
{"ServiceResponseCode":200,
"ServiceResponseMessage":"OK"
},
"MidasCarrierServiceabilityResult":
{"ResultItemCount":1,
"MidasGeocoderServiceReturnStatus":
{"GeocodeServiceReturnStatus":200,
"GeocodeServiceReturnStatusMessage":"OK"
},"MidasCarrierServiceabilityGeocodeAddressResultItems":
[{"ResultAddress":
{"Address1":"605 W MAIN ST",
"Address2":"",
"City":"NEW LEBANON",
"State":"OH",
"ZipCode":"45345",
"GeocodeResults":null
},
"FiberResult":
{"BuildingKey":159088,
"Lata":"328",
"ClliCode":"NWLBOH04",
"CoaxStatus":"Serviceable On-Net",
"FiberStatus":"Construction Required (contact your sales rep.)",
"ServiceInstallInterval":"Unknown"
}
}
],
"InternalAddressKey":"8cfa2b89-63ab-4dc2-a188-74fb7eab2d31",
"CustomerAddressKey":"NAK",
"RequestAddressItem":
{"IsInvalid":false,
"InternalAddressKey":"8cfa2b89-63ab-4dc2-a188-74fb7eab2d31",
"CustomerAddressKey":"NAK",
"MidasGeocodeRequestAddress":
{"Address":"605 W MAIN ST",
"City":"NEW LEBANON",
"State":"OH",
"Zipcode":"45345"
},
"MidasGeocoderAddressValidationStatus":null
}
}
}

这是与返回的内容匹配的类:

package com.accesspoint.twctest;

import org.codehaus.jackson.annotate.JsonProperty;

public class MidasCarrierServiceabilityResponse {
private String clientId;
private String clientTrackingId;
private String midasServiceResponseId;
private int currentPeriodRequestsUsed;
private int currentPeriodRequestsAvailable;
private MidasCarrierServiceabilityServiceReturnStatus midasCarrierServiceabilityServiceReturnStatus;
private MidasCarrierServiceabilityResult midasCarrierServiceabilityResult;

public String getClientId() {
return ClientId;
}

public void setClientId(String ClientId) {
this.ClientId = ClientId;
}

public String getClientTrackingId() {
return clientTrackingId;
}

public void setClientTrackingId(String ClientTrackingId) {
this.clientTrackingId = ClientTrackingId;
}

public String getMidasServiceResponseId() {
return midasServiceResponseId;
}

public void setMidasServiceResponseId(String MidasServiceResponseId) {
this.midasServiceResponseId = MidasServiceResponseId;
}

public int getCurrentPeriodRequestsUsed() {
return currentPeriodRequestsUsed;
}

public void setCurrentPeriodRequestsUsed(int CurrentPeriodRequestsUsed) {
this.currentPeriodRequestsUsed = CurrentPeriodRequestsUsed;
}

public int getCurrentPeriodRequestsAvailable() {
return currentPeriodRequestsAvailable;
}

public void setCurrentPeriodRequestsAvailable(int CurrentPeriodRequestsAvailable) {
this.currentPeriodRequestsAvailable = CurrentPeriodRequestsAvailable;
}

public MidasCarrierServiceabilityServiceReturnStatus getMidasCarrierServiceabilityServiceReturnStatus() {
return midasCarrierServiceabilityServiceReturnStatus;
}

public void setMidasCarrierServiceabilityServiceReturnStatus(MidasCarrierServiceabilityServiceReturnStatus midasCarrierServiceabilityServiceReturnStatus) {
this.midasCarrierServiceabilityServiceReturnStatus = midasCarrierServiceabilityServiceReturnStatus;
}

public MidasCarrierServiceabilityResult getMidasCarrierServiceabilityResult() {
return midasCarrierServiceabilityResult;
}

public void setMidasCarrierServiceabilityResult(MidasCarrierServiceabilityResult midasCarrierServiceabilityResult) {
this.midasCarrierServiceabilityResult = midasCarrierServiceabilityResult;
}


}

我尝试将 @JsonProperty("ClientId") 放在 clientId 字段之前,但这没有帮助。我已经尝试了字段名称的首字母大写和首字母小写,两者的结果相同。有人能看出我的问题出在哪里吗?

最佳答案

您可能希望将 PropertyNamingStrategy 设置为 PASCAL_CASE_TO_CAMEL_CASE

How to set PropertyNamingStrategy for RestTemplate in SpringBoot?

(您的 clientId getter 和 setter 错误)

希望对你有帮助

关于java - Spring RestTemplate.getForObject() 的 JSON 转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37484626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com