REST Web服务(发布)消耗JSON不起作用

时间:2019-04-08 15:39:28

标签: java json web-services

因此,我试图创建一个使用json的简单Web服务帖子。但是我收到错误RESTEASY002010: Failed to execute: javax.ws.rs.NotSupportedException: RESTEASY003065: Cannot consume content type

我的网络服务:

@POST
@Produces(MediaType.APPLICATION_XML)
@Path("teste1")
@Consumes(MediaType.APPLICATION_JSON)
public Response teste1(String product) {

    String result = "Product created : " + product;
    System.out.println("resultado");
    System.out.println(result);
    return Response.ok() //200
            .entity("<erro> none </erro>")
            .header("Access-Control-Allow-Origin", "*")
            .header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT")
            .header("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With").build();

}

我也尝试这样做:

 @Consumes("application/json")

但是我遇到了同样的错误。 如果可以的话,我可以使它起作用

  @Consumes("*/*")

但是当我说它使用json时,我不明白为什么它不起作用。要测试Web服务,我正在使用https://apitester.com/。随着以下Post Data:

{
    "key" : "value",
    "array" : [
        { "key" : 1 },
        { "key" : 2, "dictionary": {
                "a": "Apple",
                "b": "Butterfly",
                "c": "Cat",
                "d": "Dog"
            } },
        { "key" : 3 }
    ]
}

1 个答案:

答案 0 :(得分:0)

一般而言

@Consumes("application/json")

指定Web服务可以处理的内容媒体类型。

但是您可能还需要在Content-Type标头中为您的请求明确指定适当的类型。

我对https://apitester.com不熟悉,但是默认情况下它可能不会发送 Content-Type 标头

例如,在这种情况下,服务器可以将请求正文视为纯文本。该请求不会路由到您的端点,因为它不是为纯文本设计的。

设置@Consumes(*/*)可以解决此问题,因为错误的媒体类型也会与该模式匹配。

能否请确保您将POST请求发送给Content-Type: application/json