Java 使用RestTemplate序列化JSON数据时出现问题
我正试图使用RestTemplate通过GET调用从我们的一个API序列化JSON数据 这就好像getForObject方法在API URL中期望一个XML值,而实际上它是一个JSON响应。从我所做的所有搜索来看,这个方法应该是JSON,而不是XML——那么有什么不对呢 非常感谢您的帮助 控制器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 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()
方法,则无法添加标题: