Android的春天。MediaType引发IllegalArgumentException:无效的令牌字符'';“在代币中”;json;字符集=utf-8“;

Android的春天。MediaType引发IllegalArgumentException:无效的令牌字符'';“在代币中”;json;字符集=utf-8“;,android,spring,jackson,Android,Spring,Jackson,我正在尝试使用Spring for Android和Jackson 2通过rest调用创建POJO // Set the Accept header HttpHeaders requestHeaders = new HttpHeaders(); requestHeaders.setAccept(Collections.singletonList(new MediaType("application","vnd.livescore_app.api.v1+json"))); requestHeade

我正在尝试使用Spring for Android和Jackson 2通过rest调用创建POJO

// Set the Accept header
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setAccept(Collections.singletonList(new MediaType("application","vnd.livescore_app.api.v1+json")));
requestHeaders.setContentType(new MediaType("application","json;charset=utf-8"));
HttpEntity<?> requestEntity = new HttpEntity<Object>(requestHeaders);

// Create a new RestTemplate instance
RestTemplate restTemplate = new RestTemplate();

// Add the Jackson message converter
restTemplate.getMessageConverters().add( new MappingJackson2HttpMessageConverter());

// Make the HTTP GET request, marshaling the response from JSON to an array of Events
ResponseEntity<AppVersionObject> responseEntity = restTemplate.exchange("https://example.com", HttpMethod.GET, requestEntity, AppVersionObject.class);
AppVersionObject object = responseEntity.getBody();
这行代码:

requestHeaders.setContentType(
    new MediaType("application","json;charset=utf-8"));
不正确,因为该构造函数被设计为采用类型和子类型,并且
json;charset=utf-8
不是有效的子类型(而是子类型和类型参数之间的连接)。您希望使用接受类型、子类型和参数映射的重载构造函数:

第二个问题是,您正在指定一个自定义响应类型(
application/vnd.livescore\u app.api.v1+json
),Spring没有为其提供HTTP消息转换器。您要么编写自己的(如突出显示的),要么将响应类型更改为“application/json”。

这行代码:

requestHeaders.setContentType(
    new MediaType("application","json;charset=utf-8"));
不正确,因为该构造函数被设计为采用类型和子类型,并且
json;charset=utf-8
不是有效的子类型(而是子类型和类型参数之间的连接)。您希望使用接受类型、子类型和参数映射的重载构造函数:


第二个问题是,您正在指定一个自定义响应类型(
application/vnd.livescore\u app.api.v1+json
),Spring没有为其提供HTTP消息转换器。您要么编写自己的(如突出显示的),要么将响应类型更改为“application/json”。

谢谢!MappingJackson2HttpMessageConverter已更改为“新媒体类型(“应用程序”,“*”)”。很粗糙但很有效,谢谢你!MappingJackson2HttpMessageConverter已更改为“新媒体类型(“应用程序”,“*”)”。粗糙但有效。
requestHeaders.setContentType(
    new MediaType("application","json;charset=utf-8"));
final Map<String, String> parameterMap = new HashMap<String, String>(4);
parameterMap.put("charset", "utf-8");
requestHeaders.setContentType(
    new MediaType("application","json", parameterMap));
application/json;charset="utf-8"