2017-04-02 62 views
0

我正在使用Netbeans的REST风格的Web服务开发Web服务。服务类包含以下方法:Netbeans的RESTful Java客户端:javax.ws.rs.NotAcceptableException:HTTP 406不可接受

@Path("jpost") 
@POST 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces(MediaType.TEXT_PLAIN) 
public String jpost(Car c){ 
    return "Car:"+c.getTag()+"\t"+c.getName()+"\t"+c.getColor(); 
} 

为了测试这种方法,我使用NetBeans的REST风格的Java客户端生成测试方法。其结果是:

public String jpost(Object requestEntity) throws ClientErrorException { 
     return webTarget.path("jpost").request(javax.ws.rs.core.MediaType.APPLICATION_JSON).post(javax.ws.rs.client.Entity.entity(requestEntity, javax.ws.rs.core.MediaType.APPLICATION_JSON), String.class); 
    } 

当我打电话jpost以下错误出现:

Exception in thread "main" javax.ws.rs.NotAcceptableException: HTTP 406 Not Acceptable 
    at org.glassfish.jersey.client.JerseyInvocation.convertToException(JerseyInvocation.java:923) 
    at org.glassfish.jersey.client.JerseyInvocation.translate(JerseyInvocation.java:770) 
    at org.glassfish.jersey.client.JerseyInvocation.access$500(JerseyInvocation.java:90) 
    at org.glassfish.jersey.client.JerseyInvocation$2.call(JerseyInvocation.java:671) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:228) 
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:422) 
    at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:667) 
    at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:423) 
    at org.glassfish.jersey.client.JerseyInvocation$Builder.post(JerseyInvocation.java:326) 
    at myserver.test5.jpost(test5.java:36) 
    at myserver.MyServerTest.main(MyServerTest.java:32) 

问题是什么?

+0

客户端没有指定正确的Content-Type。这里唯一正确的内容类型是文本/明文 –

+0

您能否在回答中指定所需的更改?我不熟悉Netbenas生成的RESTful客户端代码。 – SuB

回答

1

您的服务仅产生text/plain响应。

HTTP代码406意味着服务器不能提供的内容类型由客户端上可接受的。因此,客户在Accepts标题中指定了错误的内容类型,或根本没有发送Accepts

要指定接受型,request(...)参数被使用。

public String jpost(Object requestEntity) throws ClientErrorException 
{ 
    return webTarget.path("jpost") 
      .request(javax.ws.rs.core.MediaType.TEXT_PLAIN) 
      .post(javax.ws.rs.client.Entity.entity(requestEntity, javax.ws.rs.core.MediaType.APPLICATION_JSON), String.class); 
} 
+0

谢谢。为什么Netbeans在我明确设置输出格式时不正确地生成这些内容。难道我做错了什么? – SuB