为什么我不能解析JSON响应(单个对象)

时间:2018-06-01 15:49:34

标签: java spring-restcontroller spring-rest

我收到此异常

org.springframework.http.converter.HttpMessageNotReadableException: Could not read document: Can not deserialize instance of com.charter.accountsearch.model.AccountBaseResponse out of START_ARRAY token
at [Source: java.io.PushbackInputStream@b7a2b45; line: 1, column: 1]; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of com.charter.accountsearch.model.AccountBaseResponse out of START_ARRAY token
at [Source: java.io.PushbackInputStream@b7a2b45; line: 1, column: 1]
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:228)
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:213)
at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:95)
at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:884)
at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:868)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:622)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:595)
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:516)
at com.charter.accountsearch.integration.AccountBaseSearchService.sendSearch(AccountBaseSearchService.java:407)
at com.charter.accountsearch.integration.AccountBaseSearchService.search(AccountBaseSearchService.java:43)
at com.charter.accountsearch.integration.AccountBaseSearchService$$FastClassBySpringCGLIB$$1827db72.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:651)
at com.charter.accountsearch.integration.AccountBaseSearchService$$EnhancerBySpringCGLIB$$6d8dfa39.search(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.expression.spel.support.ReflectiveMethodExecutor.execute(ReflectiveMethodExecutor.java:113)
at org.springframework.expression.spel.ast.MethodReference.getValueInternal(MethodReference.java:129)
at org.springframework.expression.spel.ast.MethodReference.access$000(MethodReference.java:49)
at org.springframework.expression.spel.ast.MethodReference$MethodValueRef.getValue(MethodReference.java:347)
at org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:88)
at org.springframework.expression.spel.ast.SpelNodeImpl.getTypedValue(SpelNodeImpl.java:131)
at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:330)
at org.springframework.integration.util.AbstractExpressionEvaluator.evaluateExpression(AbstractExpressionEvaluator.java:169)
at org.springframework.integration.util.MessagingMethodInvokerHelper.processInternal(MessagingMethodInvokerHelper.java:317)
at org.springframework.integration.util.MessagingMethodInvokerHelper.process(MessagingMethodInvokerHelper.java:155)
at org.springframework.integration.handler.MethodInvokingMessageProcessor.processMessage(MethodInvokingMessageProcessor.java:93)
at org.springframework.integration.handler.ServiceActivatingHandler.handleRequestMessage(ServiceActivatingHandler.java:89)
at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:109)
at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:127)
at org.springframework.integration.dispatcher.AbstractDispatcher.tryOptimizedDispatch(AbstractDispatcher.java:116)
at org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:148)
at org.springframework.integration.dispatcher.UnicastingDispatcher.access$000(UnicastingDispatcher.java:53)
at org.springframework.integration.dispatcher.UnicastingDispatcher$3.run(UnicastingDispatcher.java:129)
at org.springframework.integration.util.ErrorHandlingTaskExecutor$1.run(ErrorHandlingTaskExecutor.java:55)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)

为了解析这个JSON响应(例子):

{     “enterpriseAccountId”:“xxxxxxxxx”,     “name”:“xxxxxxxx”,     “地址”:“xxxxxxxxxx”,     “city”:“xxxxxxx”,     “territoryCode”:“xxxxxxxx”,     “postalCode”:“xxxxxxxxxxx”,     “primaryPhoneNumber”:“xxxx”,     “assignedAccountRepresentative”:“zxxxxxx”,     “vip”:“false”,     “countryCode”:“xxxxxxxxxxx” }

这是我的代码:

    HttpHeaders headers = new HttpHeaders();
    headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
    headers.add(AUTHORIZATION, "OAuth " + authorization.getAccess_token());

    RestTemplate restTemplate = new RestTemplate();
    restTemplate.setErrorHandler(new ClientResponseErrorHandler());

    MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();

    converter.setSupportedMediaTypes(
            Arrays.asList(new MediaType[] { MediaType.APPLICATION_JSON, MediaType.APPLICATION_OCTET_STREAM }));

    restTemplate.setMessageConverters(Arrays.asList(converter, new FormHttpMessageConverter()));

    HttpEntity<Object> requestEntity = new HttpEntity<Object>(headers);

    if (StringUtils.isNotEmpty(request.getPayload().getBillingAccountId())) {
        UriComponentsBuilder builder = UriComponentsBuilder
                .fromHttpUrl(authorization.getInstance_url() + "/services/apexrest/EnterpriseObjects/"
                        + "eGateWayAccountBase/" + request.getPayload().getBillingAccountId());

        URI uri = builder.build().encode().toUri();


        ResponseEntity<AccountBaseResponse> response = restTemplate.exchange(uri, HttpMethod.GET, requestEntity,
                AccountBaseResponse.class);


        return response.getBody();

以下是模型:

@ApiModel("The account base service response message.")
public class AccountBaseResponse {



@ApiModelProperty(value = "Id for Enterprise Account.", required = true)
private String enterpriseAccountId;
@ApiModelProperty(value = "Name.", required = true)
private String name;
@ApiModelProperty(value = "Biller Display Id.", required = true)
private String billerDisplayId;
@ApiModelProperty(value = "Billing Designator.", required = true)
private String billingDesignator;
@ApiModelProperty(value = "Billing System Instance.", required = true)
private String billingSystemInstance;
@ApiModelProperty(value = "Legacy Mso.", required = true)
private String legacyMso;
@ApiModelProperty(value = "Biller Account Status.", required = true)
private String billerAccountStatus;
@ApiModelProperty(value = "Vertical.", required = true)
private String vertical;
@ApiModelProperty(value = "Primary Phone Number.", required = true)
private String primaryPhoneNumber;
@ApiModelProperty(value = "Address.", required = true)
private String address;
@ApiModelProperty(value = "Address City.", required = true)
private String city;
@ApiModelProperty(value = "Territory Code.", required = true)
private String territoryCode;
@ApiModelProperty(value = "Postal Code.", required = true)
private String postalCode;
@ApiModelProperty(value = "Country Code.", required = true)
private String countryCode;
@ApiModelProperty(value = "Telcom Service Priority Indicator.", required = true)
private boolean telcomServicePriorityIndicator;
@ApiModelProperty(value = "ASsigned Account Representative.", required = false)
private String assignedAccountRepresentative;
@ApiModelProperty(value = "Assigned CSM Representative.", required = false)
private String assignedCSMrepresentative;
@ApiModelProperty(value = "Type II Vendor Indicator.", required = true)
private boolean typeIIvendorIndicator;
@ApiModelProperty(value = "Vip.", required = true)
private boolean vip;

//getters and setters ommitted

很明显,我没有收到JSON数组作为响应 - 为什么我会收到此异常?

此致

0 个答案:

没有答案