我有一个具有以下方法的 JAX-RS WebService:
@Path("/myrest")
public class MyRestResource {
...
@GET
@Path("/getInteger")
@Produces(APPLICATION_JSON)
public Integer getInteger() {
return 42;
}
使用此剪辑访问时:
@Test
public void testGetPrimitiveWrapers() throws IOException {
// this works:
assertEquals(new Integer(42), new ObjectMapper().readValue("42", Integer.class));
// that fails:
assertEquals(new Integer(42), resource().path("/myrest/getInteger").get(Integer.class));
}
我得到以下异常:
com.sun.jersey.api.client.ClientResponse getEntity
SEVERE: A message body reader for Java class java.lang.Integer, and Java type class java.lang.Integer, and MIME media type application/json was not found
com.sun.jersey.api.client.ClientResponse getEntity
SEVERE: The registered message body readers compatible with the MIME media type are: application/json
...
问题只是返回单个原始值(int/boolean)或其包装类。返回其他 POJO 类不是问题,所以我猜关于 JSONConfiguration.FEATURE_POJO_MAPPING 和 JAXB 注释的所有答案都不适用于这里。或者,如果我无权访问其类源,我应该使用哪个注释来描述返回类型?
使用 ngrep 我可以验证 Web 服务仅返回字符串“42”。根据规范,这是一个有效的 JSON“值”,但不是一个有效的 JSON“文本”。那么我的问题是在客户端还是服务器端?
我尝试根据http://tugdualgrall.blogspot.de/2011/09/jax-rs-jersey-and-single-element-arrays.html激活 JSONConfiguration natural/badgerfish但没有成功(ngrep 仍然只显示“42” )。那会是正确的道路吗?
任何想法表示赞赏!