Jersey 返回JAX-RS中的自定义对象和控制响应代码

Jersey 返回JAX-RS中的自定义对象和控制响应代码,jersey,Jersey,我在web应用程序中使用JAX-RS返回我自己的对象。 我想继续这样做,但我想设置HTTP响应代码(例如,401表示未经授权,等等)。 从我找到的信息来看,似乎我必须返回类型响应,而不是我的自定义对象。 对吗 我当前的代码(简化)MyResponse是Jaxb知道如何处理的对象时: @POST @Produces({MediaType.APPLICATION_XML , MediaType.APPLICATION_JSON}) public MyResponse RegisterUser (

我在web应用程序中使用JAX-RS返回我自己的对象。 我想继续这样做,但我想设置HTTP响应代码(例如,401表示未经授权,等等)。 从我找到的信息来看,似乎我必须返回类型响应,而不是我的自定义对象。 对吗

我当前的代码(简化)MyResponse是Jaxb知道如何处理的对象时:

@POST
@Produces({MediaType.APPLICATION_XML , MediaType.APPLICATION_JSON})
public MyResponse RegisterUser (
        @FormParam("userName") String userName,
        @FormParam("password") String password) {
    // add user logic
    return new MyResponse(....<params to ctor...);
  }
@POST
@产生({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
公共MyResponse注册器(
@FormParam(“用户名”)字符串用户名,
@FormParam(“密码”)字符串(密码){
//添加用户逻辑
返回新的MyResponse(…是的,你是对的

您需要使用以下内容:

@POST
@Produces({MediaType.APPLICATION_XML , MediaType.APPLICATION_JSON})
public Response RegisterUser (
    @FormParam("userName") String userName,
    @FormParam("password") String password) {
    // add user logic
    return Response.status(401).entity(new MyResponse(...)).build();
}

有关其他有用信息,请参阅(和其他章节)。

您可以扩展响应类并在重写
getStatus()时返回自定义状态
method.

我知道我参加聚会迟到了,但我想发表一条评论。.虽然你当然可以按照Pavel所描述的那样做,但如果你使用异常,你可以两全其美。你的方法将返回MyObject类型,在你的401示例中,你将抛出WebApplicationException并填充状态代码和实体体。S举个例子。@Mike当我这样做的时候,我得到了错误500,有什么问题吗?