【问题标题】:Retrieve original JSON request in case of 500 HTTP error in a REST WS在 REST WS 中出现 500 HTTP 错误时检索原始 JSON 请求
【发布时间】:2018-09-27 07:34:30
【问题描述】:

如果出现 500 错误,有什么方法可以获取在 REST WS PUT 请求中收到的原始 JSON 对象?

这是我的 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();
}
}

但是在这里面没有办法得到第一时间收到的车辆

请帮忙!

【问题讨论】:

    标签: json rest web-services jakarta-ee cxf


    【解决方案1】:

    您可以创建一个简单的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.");
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-15
      • 1970-01-01
      • 1970-01-01
      • 2013-09-14
      • 2019-07-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多