带JSON的JAX-RS

时间:2014-06-10 08:04:22

标签: java jax-rs

我已经使用JAX-RS和Resteasy建立了一个Web服务。 GET请求正在运行但是当我通过POST发送JSON-Request时,我收到一条415 Unsupported Media Type错误消息。 以下代码显示了我当前的实现:

@Path("ws")
public class YagiSolverWebservice
{
    @GET
    public String hello()
    {
        return "HELLO!";
    }

    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    public void solveGrid(Test test)
    {
        System.out.println("Test: " + test);
    }
}

修改

我正在使用POSTMAN测试Webserive作为chrome插件。在chrome请求中生成以下标头:

POST /YagiSolver/ws HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 34
Cache-Control: no-cache
Origin: chrome-extension://fdmmgilgnpjigdojojpjoooidkmcomcm
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.132 Safari/537.36
Content-Type: application/json
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4

2 个答案:

答案 0 :(得分:0)

你应该在@Consumes中提供mime类型

@Consumes的值是可接受MIME类型的String数组。例如:

@Consumes({"text/plain,text/html"})

以下示例显示如何在类和方法级别应用@Consumes:

@Path("/myResource")
@Consumes("multipart/related")
public class SomeResource {
    @POST
    public String doPost(MimeMultipart mimeMultipartData) {
        ...
    }

    @POST
    @Consumes("application/x-www-form-urlencoded")
    public String doPost2(FormURLEncodedProperties formData) {
        ...
    }
}

您可以在http://docs.oracle.com/cd/E19798-01/821-1841/giepu/index.html

中详细了解相关信息

答案 1 :(得分:0)

您需要检查AcceptContent-Types标题,并且必须是application/json。 因为您的服务仅消耗json

    'Accept': 'application/json',
    'Content-Type': 'application/json'