Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用RestTemplate序列化JSON数据时出现问题_Java_Spring_Rest_Spring Boot_Http - Fatal编程技术网

Java 使用RestTemplate序列化JSON数据时出现问题

Java 使用RestTemplate序列化JSON数据时出现问题,java,spring,rest,spring-boot,http,Java,Spring,Rest,Spring Boot,Http,我正试图使用RestTemplate通过GET调用从我们的一个API序列化JSON数据 这就好像getForObject方法在API URL中期望一个XML值,而实际上它是一个JSON响应。从我所做的所有搜索来看,这个方法应该是JSON,而不是XML——那么有什么不对呢 非常感谢您的帮助 控制器 RestTemplate appApi = new RestTemplate(); Application app = appApi.getForObject("api url", Applicatio

我正试图使用RestTemplate通过GET调用从我们的一个API序列化JSON数据

这就好像getForObject方法在API URL中期望一个XML值,而实际上它是一个JSON响应。从我所做的所有搜索来看,这个方法应该是JSON,而不是XML——那么有什么不对呢

非常感谢您的帮助

控制器

RestTemplate appApi = new RestTemplate();
Application app = appApi.getForObject("api url", Application.class);
应用

import lombok.Data;

@Data
public class Application {
    ApplicationDetails value;

    @Data
    public class ApplicationDetails {
        String salsaId;
        String itSystemName;
        String businessOwner;
        String businessOwnershipLob;
        String leadProgramme;
        String lifecycleStage;
    }
}
响应“API URL”的示例将给出:

{
  "value": {
    "salsaId": "data",
    "itSystemName": "data",
    "businessOwner": "data",
    "businessOwnershipLob": "data",
    "leadProgramme": "data",
    "lifecycleStage": "data"
  }
}
在我看来,这一切都应该工作得很好,来自该api调用的响应应该保存在应用程序对象“app”中。但是,在运行时,我会出现以下错误:

2019-02-12 15:36:47.644 ERROR 864 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.client.RestClientException: Error while extracting response for type [class com.***.tools.***.models.Application] and content type [application/xml;charset=UTF-8]; nested exception is org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unexpected character '{' (code 123) in prolog; expected '<'
 at [row,col {unknown-source}]: [1,1]; nested exception is com.fasterxml.jackson.core.JsonParseException: Unexpected character '{' (code 123) in prolog; expected '<'
 at [row,col {unknown-source}]: [1,1]] with root cause

com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character '{' (code 123) in prolog; expected '<'
 at [row,col {unknown-source}]: [1,1]

2019-02-12 15:36:47.644错误864---[nio-8080-exec-1]o.a.c.c.c.[/].[dispatcherServlet]:路径为[]的上下文中Servlet[dispatcherServlet]的Servlet.service()引发异常[请求处理失败;嵌套异常为org.springframework.web.client.RestClientException:提取类型响应时出错[class com.**.tools.**.models.Application]和内容类型[Application/xml;charset=UTF-8];嵌套异常为org.springframework.http.converter.httpMessageNodeTableException:JSON解析错误:意外字符“{”(代码123)在prolog中;预期的“编辑:我看到您自己也注意到了xml的事情。可能响应中的内容类型头被设置为application/xml?试试这个
HttpHeaders headers=new-HttpHeaders();headers.setAccept(Arrays.asList(MediaType.application_JSON));HttpEntity entity=new-HttpEntity(“参数”,头);ResponseEntity result=restemplate.exchange(uri、HttpMethod.GET、实体、应用程序.class)
@dkb谢谢,我尝试了一下,它似乎确实“起作用”,但这并不完全是我想做的。我希望我可以序列化json并将其直接放入应用程序对象,而不是响应实体。@dkb我尝试使用这些头并将其作为参数添加到getForObject方法中,但它似乎没有起到作用更改任何内容。如果您使用的是
getForObject()
method:Edit:我看到您自己也注意到了xml问题。可能响应中的内容类型标题设置为application/xml?请尝试以下操作
HttpHeaders headers=new HttpHeaders();headers.setAccept(Arrays.asList(MediaType.application\u JSON));HttpEntity实体=新HttpEntity(“参数”,标题);ResponseEntity结果=restTemplate.exchange(uri,HttpMethod.GET,实体,Application.class)
@dkb谢谢,我尝试了一下,它似乎确实“起作用”,但这并不完全是我想做的。我希望我可以序列化json并将其直接放入应用程序对象,而不是响应实体。@dkb我尝试使用这些头并将其作为参数添加到getForObject方法中,但它似乎没有起到作用更改任何内容。如果使用的是
getForObject()
方法,则无法添加标题: