在 REST WS 中出现 500 HTTP 错误时检索原始 JSON 请求



有没有办法获取在 REST WS PUT 请求中收到的原始 JSON 对象,以防出现 500 错误?

这是我的WS接口:

public interface VehicleConnectedMileageApi {
    public Response updateConnectedVehiclemileage(@ApiParam(value = "vehicle" ,required=true ) Vehicle vehicle)
  throws NotFoundException;
}

在我的应用程序上下文 xml 文件中,我使用以下方法来定义 WS

<!-- For VehicleConnectedMileage  -->
<jaxrs:server id="VehicleConnectedMileageREST" address="/mileageManagement">
    <jaxrs:serviceBeans>
        <ref bean="VehicleConnectedMileageApiImpl" />
    </jaxrs:serviceBeans>
    <jaxrs:providers>
        <bean class="com.europcar.gwy.fleet.utils.error.RuntimeExceptionMapperHandler" />
        <bean class="com.europcar.gwy.fleet.utils.error.MappingDataExceptionMapper" />
        <bean id="jacksonObjectMapperProvider" class="com.europcar.gwy.fleet.utils.providers.JacksonObjectMapperProvider" />
        <bean id="dateParameterConverterProvider" class="com.europcar.gwy.fleet.utils.providers.DateParamConverterProvider" />
        <bean id="jacksonProvider" class="org.codehaus.jackson.jaxrs.JacksonJsonProvider" />
    </jaxrs:providers>
</jaxrs:server>

但是在上面的那些提供程序和映射器中,无法访问第一次收到的 Vehicle 对象。

这是使用的RuntimeExceptionMapper的示例:

@Provider
public class RuntimeExceptionMapperHandler implements ExceptionMapper<Exception>{
/** The invalid Data id. */
private String INTERNAL_SERVER_ERROR_ID = ""; // TODO which error Id
private String INTERNAL_SERVER_ERROR_MSG = ""; // TODO which error message
/** The invalid data or content  desc. */
private String INTERNAL_SERVER_ERROR_DESC = "An error has occurred during the processing of your request"; // TODO which error desc
/* (non-Javadoc)
 * @see javax.ws.rs.ext.ExceptionMapper#toResponse(java.lang.Throwable)
 */
@SuppressWarnings("unchecked")
@Override
public Response toResponse(Exception pEx) {
    return ErrorResponseBuilder.prepareInternalServerErrorRequestResponse(INTERNAL_SERVER_ERROR_ID, INTERNAL_SERVER_ERROR_DESC,INTERNAL_SERVER_ERROR_MSG).build();
}
}

但是在这里面,没有办法首先获得车辆

请帮忙!

您可以创建一个简单的ContainerRequestFilter并包含在提供程序中。在过滤器方法中,您可以获取请求。

import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.ext.Provider;
@Provider
public class RequestInterceptor implements ContainerRequestFilter
{
    @Override
    public void filter(ContainerRequestContext requestContext) throws IOException
    {       
        System.out.println("Filter executed.");
    }
}

最新更新