有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

解析媒体类型“application/json”时发生java错误;编码=utf8,字符集=utf8'

我将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;
  }
}

我做错了什么


共 (2) 个答案

  1. # 1 楼答案

    基本上,您需要删除内容类型字符串中的逗号“”

    或者,您需要将逗号用双引号括起来

    范例

    内容类型:视频/mp4;codecs=“avc1.64001F,mp4a.40.2”

    “编解码器”中的“逗号”必须用双引号括起来

  2. # 2 楼答案

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

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

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

    在哪里

    parameter := attribute "=" value
    

    因此,您可以将作为可解析的媒体类型:

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

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

    Content-type: application/json; charset=utf8
    

    如果这是一个客户端错误,那么您可能需要配置一个Accept头(由于您没有发送任何负载,所以不需要内容类型)。在不指定字符集的情况下尝试它(如果失败,它将由于其他原因失败)。您可以使用交互式REST客户端(如Firefox REST client)测试不同的头和编码