当前位置: 首页 > 面试题库 >

在jax-rs REST服务中更改内容类型

陆海阳
2023-03-14
问题内容

请原谅我,但我可能不熟悉正确询问此问题所需的所有术语。

我正在使用org.apache.cxf.jaxrs.extjax-rs 的实现在Java中使用一个相当简单的REST Web服务。方法头是这样的:

@GET
@Path("json/{fullAlias}")
@Produces({"application/json"})
public String json(@PathParam("fullAlias") String fullAlias, @Context MessageContext req)

MessageContext在哪里org.apache.cxf.jaxrs.ext.MessageContext

我要完成的两件事似乎无法弄清:

  1. 如果满足某些条件(例如,出现错误),则更改内容类型
  2. 更改响应的状态码

我尝试通过通过MessageContext访问响应来更改响应:

HttpServletResponse response = req.getHttpServletResponse();
response.setContentType("text/plain")
response.setStatus("HttpServletResponse.SC_BAD_REQUEST);

但是这些变化与发送的响应无关。带有或不带有@Produces批注,在方法内设置内容类型不会影响实际的内容类型(带有批注,它当然会返回“
application / json”,没有默认值是“ text / html”)。

我将返回一个简单的String作为正文。我尝试返回一个javax.ws.rs.core.Response对象来完成我想要的事情,但是我对此并不了解。

如何在此方法内部更改内容类型和/或状态代码?


问题答案:

一种方法是引发WebApplicationException,如Pace所述,如果您要专门处理错误情况,该方法将起作用。如果您希望由于任何原因能够随时更改内容,那么您将希望看看作为服务方法而不是字符串返回结果的响应。返回响应可以最大程度地控制服务对客户端请求的响应方式(与返回简单字符串相比,它确实需要更多代码)。

这是一个如何使用Response对象的示例

@GET
@Path("json/{fullAlias}")
public Response json(@PathParam("fullAlias") String fullAlias, @Context MessageContext req) {
    ...
    if (success) {
        ResponseBuilder rBuild = Response.ok(responseData, MediaType.APPLICATION_JSON);
        return rBuild.build();
    }
    else {
        ResponseBuilder rBuild = Response.status(Response.Status.BAD_REQUEST);
        return rBuild.type(MediaType.TEXT_PLAIN)
                     .entity("error message")
                     .build();
    }    
}


 类似资料:
  • 我正在为我的Android手机构建一个小应用程序,使用非常基本的REST界面将短信转发到网络服务器。 我正在使用android 4.0.3 SDK。我使用Django和Django restframework包在python中开发了webservice。设置完全是开箱即用的。基本上只有一个endpoint接收包含消息信息(发件人、正文、日期)的JSON对象的帖子。我使用cURL和以下命令测试了该服

  • 问题内容: 我正在为我的Android手机构建一个小型应用程序,以使用非常基本的REST界面将短信转发到网络服务器。 我正在使用android 4.0.3 SDK。我使用Django和Django restframework包在python中开发了Web服务。设置完全是开箱即用的。基本上有一个端点可以接收包含消息信息(发送者,正文,日期)的JSON对象的POST。我已经使用cURL通过以下命令测试

  • 我创建了WCF服务,该服务将由需要接受内容类型application/xml;charset=UTF-8和SOAP1.1信封命名空间的第三方使用。该服务当前正在接受text/xml;charset=utf-8。不允许客户端更改内容类型。 我没有对web.config文件做任何更改,除了设置basicHttpBinding MaxReceivedMessageSize。

  • 我有一本书。NETCore2.0WebAPI应用程序,其中我将“Flurl.Http”(版本2.1.0)NuGet包添加到我的项目中。 我正在尝试使用Flurl对一个VisualStudioTeamServices(VSTS)APIendpoint进行简单的RESTAPI调用。 但是,我正在调用的特定VSTS api终结点要求将Content-Type设置为“应用程序/json-补丁json”,而

  • 问题内容: 我正在使用Express创建网站和API,我想在同一路径上提供多种内容类型(JSON,XML,HTML)。在Express中,有一种更好的方法可以编写以下内容: 特别是上面的代码似乎很重复,可能有一种更标准的编写方式。 问题答案: 有response.format方法,该方法使用基于“ Accept”标头选择某些呈现方法。http://expressjs.com/4x/api.html

  • 我有这个代码: 当我运行它时,我在控制台上得到以下打印: 因此,它返回415个不受支持的媒体类型错误代码。 我在StackOverflow上发现,它可能是由上下文类型中的charset=UTF-8引起的。所以我的问题是,我如何编辑这个字段来满足我的需求(删除charset=UTF-8)。链接 如何更改该内容类型。由于我不熟悉HTTP协议,请详细说明。