具有非OK状态的响应不尊重生产者注释中的内容类型

时间:2014-08-14 22:34:31

标签: jersey jackson jersey-2.0

我在使用泽西时遇到了一个奇怪的事情.. 我有整个资源类的@Producer(MediaType.APPLICATION_JSON)。 我有一个类CustomerResponse,这是正常的) 如果我返回Response.status(Stauts.OK).entity(customerResponse).build(),在客户端,我将收到我期望的json实体。 但是,如果我返回Response.status(Stauts.BAD_REQUEST).entity(customerResponse).build(),则内容类型将变为text / html。

如果我将Producer更改为APPLICATION_XML,则会发生同样的事情。在我看来,只有400的响应将返回@Producer注释中指定的内容类型。对于具有其他状态代码的所有响应,它将只返回text / html。

任何人都可以帮我这个吗?非常感谢你。

2 个答案:

答案 0 :(得分:1)

事实证明这很有趣。 我通过使用以下代码

开始使用grizzly servlet而不是灰熊服务器
WebappContext webappContext = new WebappContext("GRIZZLY Web Server WebappContext");
ServletRegistration servletRegistration = webappContext.addServlet("JerseyServletContainer", ServletContainer.class);
servletRegistration.setInitParameter("jersey.config.server.provider.packages", WebServiceConstants.ROOT_PACKAGE);
servletRegistration.addMapping("/*");
webappContext.deploy(grizzlyWebServer);
startGrizzlyWebServer(grizzlyWebServer);

似乎servlet以某种方式将所有非OK(不是400)http响应的内容类型转换为type = text / html;字符集= ISO-8859-1。

如果我启动了grizzly-http-server,一切正常。

答案 1 :(得分:0)

我们使用如下:

Response.status(Response.Status.BAD_REQUEST).entity(myObject)
            .type(MediaType.APPLICATION_JSON_TYPE).build()
相关问题