java – 解析媒体类型’application / json; encoding = utf8,charset = utf-8’时出错

我正在使用DropWizard和jersey来创建一个从服务器接受JSON并将其映射到POJO的客户端.但是,我在调用客户端时收到此错误.

java.lang.IllegalArgumentException: Error parsing media type 'application/json;encoding=utf8, charset=utf-8'

我的代码如下:

@Path("/something")
@Produces(MediaType.APPLICATION_JSON)
public class SampleClient {
  final Client client;
  WebResource.Builder builder;

  public SampleClient (Client client) {
    this.client = client;
    this.builder = client.resource("http://localhost/mysample/service").type("application/json");
  }

  @GET
  public MyMapper getSomething() {
   MyMapper result = builder.accept("application/json").get(MyMapper.class);
   return result;
  }
}

我究竟做错了什么?

解决方法:

您是否在客户端生成该标头?

根据W3C – 4 The Content-Type Header Field,Content-type标头必须具有以下格式:

Content-Type := type "/" subtype *[";" parameter] 

哪里

parameter := attribute "=" value

所以你可以拥有一个可解析的媒体类型:

Content-type: application/json; encoding=utf8; charset=utf8

使用分号而不是逗号.这并不意味着它是正确的,只是可解析的.请尝试使用:

Content-type: application/json; charset=utf8

如果这是客户端错误,那么您可能需要配置Accept标头(并且由于您没有发送任何有效负载,因此不需要Content-type).在没有指定字符集的情况下尝试它(如果失败,它将因其他原因而失败).您可以使用交互式REST客户端(例如Firefox REST client)测试不同的标头和编码

上一篇:java – @Consumes({“application / xml,application / json”})如何编程返回类型


下一篇:Java Jersey REST请求参数卫生