有没有办法获取在 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.");
}
}