【发布时间】:2020-01-24 19:26:18
【问题描述】:
我需要保存POST服务的PDF,但总是收到错误:
“提取类型 [class java.lang.Object] 和内容类型 [application/pdf] 的响应时出错;嵌套异常是 org.springframework.http.converter.HttpMessageNotReadableException:JSON 解析错误:意外字符('%' (代码 37)):期望一个有效值(JSON 字符串、数字、数组、对象或标记“null”、“true”或“false”); 嵌套异常是 com.fasterxml.jackson.core.JsonParseException: Unexpected character ('%' (code 37)): 需要一个有效值(JSON 字符串、数字、数组、对象或标记 'null'、'true' 或 'false ')"
我正在使用 Spring Boot 和 RestTemplate
例子:
public static final String base_url = "https://evx.jsreportonline.net/api/report";
static {
HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> hostname.equals("evx.jsreportonline.net"));
}
private HttpHeaders getHeaders() {
if (null == headers) {
headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setAccept(Arrays.asList(MediaType.ALL));
headers.add("Authorization", "Basic " + Base64.getEncoder().encodeToString("test_pdf:test_pdf".getBytes()));
}
return headers;
}
public void getRepo() {
List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
RestTemplate restTemplate = new RestTemplate();
Json jsonObj = new Json("{\"template\":{\"shortid\":\"JCdUaT_\"},\"data\":null}");
// REQUEST
HttpEntity<Object> entity = new HttpEntity<>(jsonObj, this.getHeaders());
/* MENSAGE CONVERTER */
converter.setSupportedMediaTypes(Collections.singletonList(MediaType.ALL));
messageConverters.add(converter);
restTemplate.setMessageConverters(messageConverters);
/* RESPONSE */
try {
Object result = restTemplate.postForObject(base_url, entity, Object.class);
byte[] resultByteArr = (byte[]) result;
} catch (Exception e) {
System.out.println(e.getMessage() + " " + e);
}
}
【问题讨论】:
标签: java spring rest spring-boot jsreport