拦截 JAX-RS web 服务响应以添加 JSON 字段
Intercept JAX-RS web service response to add JSON field
我有一个 JAX-RS Web 服务,它 return 是一个 Response 对象,如下所示(在 WebLogic 12.2.1 中是 运行)。它将 return 对客户端的 JSON 响应。是否可以编写一个拦截器或过滤器,以便在调用 Web 服务时 returned,它会在 JSON 响应中添加一个额外的字段?
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Path("LogIn")
public Response logIn(@Context HttpServletRequest request, Parameters requestParameters) {...}
提前致谢。
如果使用 Jersey,那么您可以尝试实现 ContainerResponseFilter
。
在覆盖 filter()
时,它提供 ContainerResponseContext
对象,使您可以访问使用 getEntity()
方法发送的响应。
您可以修改此对象并将其设置回响应中。
public class ResponseInterceptor implements ContainerResponseFilter{
@Override
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
throws IOException {
Object obj = responseContext.getEntity();
// Modify the Response obj as per need
responseContext.setEntity(obj);
}
}
我有一个 JAX-RS Web 服务,它 return 是一个 Response 对象,如下所示(在 WebLogic 12.2.1 中是 运行)。它将 return 对客户端的 JSON 响应。是否可以编写一个拦截器或过滤器,以便在调用 Web 服务时 returned,它会在 JSON 响应中添加一个额外的字段?
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Path("LogIn")
public Response logIn(@Context HttpServletRequest request, Parameters requestParameters) {...}
提前致谢。
如果使用 Jersey,那么您可以尝试实现 ContainerResponseFilter
。
在覆盖 filter()
时,它提供 ContainerResponseContext
对象,使您可以访问使用 getEntity()
方法发送的响应。
您可以修改此对象并将其设置回响应中。
public class ResponseInterceptor implements ContainerResponseFilter{
@Override
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
throws IOException {
Object obj = responseContext.getEntity();
// Modify the Response obj as per need
responseContext.setEntity(obj);
}
}