Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将对象从API资源方法传递到APIFilter后检查方法_Java_Rest_Jersey_Jax Rs_Jersey 2.0 - Fatal编程技术网

Java 将对象从API资源方法传递到APIFilter后检查方法

Java 将对象从API资源方法传递到APIFilter后检查方法,java,rest,jersey,jax-rs,jersey-2.0,Java,Rest,Jersey,Jax Rs,Jersey 2.0,我有一个用例,对于所有的PUT/Delete/Update调用,我想发送一些对象到ApiFilter的PostCheck进行一些处理 我试着这样做: @Context HttpServletRequest request; @Context ContainerResponseContext responseContext ; @PUT @Path("/snmp") @Produces(MediaType.APPLICATION_JSON) @Timed public Response<L

我有一个用例,对于所有的PUT/Delete/Update调用,我想发送一些对象到ApiFilter的PostCheck进行一些处理

我试着这样做:

@Context
HttpServletRequest request;
@Context
ContainerResponseContext responseContext ;
@PUT
@Path("/snmp")
@Produces(MediaType.APPLICATION_JSON)
@Timed

public Response<List<SNMPSettingsFactory.ExternalSNMPSettings>> updateSNMPTargetSettingsList(
        @Nonnull SNMPSettingsFactory.ExternalSNMPSettings externalSNMPSettings)
   {
     request.setAttribute("old",oldSettingObject);
     request.setAttribute("new",currentSettingObject);

请帮助我如何将所有API调用的对象传递给postfilter,以执行一些常见的处理,如查找差异并记录它。

您可以将ContainerRequestContext注入资源并使用
setProperty()
。用户可以使用
getProperty()
检索它。您已经在使用
HttpServletRequest#setAttribute()
执行类似的操作。当我用getAttribute()获取它时,您可以用
getAttribute()检索它,它的值为null。什么是null?你同意NullPointerException吗?HttpServletRequst是否为空?
@Provider
public class ApiFilter implements ContainerRequestFilter, 
ContainerResponseFilter {

private final ApiNonFunctionalHandler handler;
private final Logger logger = LoggerFactory.getLogger(ApiFilter.class);
public ApiFilter(ApiNonFunctionalHandler handler) {
    this.handler = handler;
}

@Context
HttpServletRequest request;
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
    try {
        String urlPath = requestContext.getUriInfo().getRequestUri().getPath();
        if (!urlPath.startsWith(ApiConstants.BASE_URL)) {
            return;
        }
        UserInfo userInfo;
        String authorization = NullOrEmpty.isFalse(requestContext.getHeaderString(CspClient.AUTH_TOKEN_HEADER))?
                requestContext.getHeaderString(CspClient.AUTH_TOKEN_HEADER) : requestContext.getHeaderString("Authorization");
        userInfo = handler.preCheck(ApiUtils.getApiCategory(urlPath),
                authorization, isAuthRequired(urlPath, requestContext.getMethod()));
        requestContext.setSecurityContext(new CustomSecurityContext(userInfo,""));


    } catch (RuntimeException e) {
        throw Throwables.propagate(e);
    } catch (Exception e) {
        throw new WebApplicationException(Response.Status.INTERNAL_SERVER_ERROR);
    }
}

@Override
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws
        IOException {

    String urlPath = requestContext.getUriInfo().getRequestUri().getPath();

    String callerIpAddress = null;
    if (request != null) {
        callerIpAddress = request.getRemoteAddr();
    }

    String callerUserName = null;
    if (request != null) {
        callerUserName = request.getRemoteUser();
    }

    Object oldObject = request.getAttribute("old");
    Object currentObject = request.getAttribute("new");