我正在JAX-RS上的Web服務上工作。現在我正在尋找捕獲一些異常的方式,以便向用戶發送一條40X的錯誤消息。如何在JAX-RS異常中使用自定義消息設置40X錯誤?
我有一個Web服務和一個ExceptionMapper。
這是我的web服務:
@Path(value = "/test/")
public interface ServiceTest {
@Path(value = "{rrf}")
@GET
@Produces(MediaType.TEXT_XML)
public ObjectDTO getDealer(@PathParam("rrf") String rrf){
ObjectDTO objectDTO = new ObjectDTO();
if(verifyRRFSintax(rrf)) {
//Get the objet, this part works fine
} else {
throw new IllegalArgumentException("Custom message");
}
return dwsDTO;
}
private boolean verifyRRFSintax(String rrf) {
return rrf.matches("[0-9]{8}");
}
}
這是我ExceptionMapper
@Provider
@Produces(MediaType.TEXT_XML)
public class IllegalArgumentExceptionMapper
implements ExceptionMapper<IllegalArgumentException> {
@Override
public Response toResponse(IllegalArgumentException e) {
return Response.status(Response.Status.BAD_REQUEST).build();
}
}
,這是它如何臨時用戶在應用 - context.xml文件
<bean id="serviceTest" class="ServiceTest"/>
<jaxrs:server id="Server" address="/ws">
<jaxrs:serviceBeans>
<ref bean="serviceTest"/>
</jaxrs:serviceBeans>
<jaxrs:providers>
<bean id="rffErrorException" class="IllegalArgumentExceptionMapper"/>
</jaxrs:providers>
</jaxrs:server>
當我調試,IllegalArgumentExceptionMapper捕獲我拋出的異常,但我看不到黃色的消息瀏覽器上顯示的網頁。我總是有一個
Erreur d'analyse XML : aucun élément trouvé/XML Parsing Error: no element found (in english)
我如何使瀏覽器顯示此自定義消息? 爲什麼即使我改變回應狀態的種類(NOT_FOUND,BAD_REQUEST,FORBIDDEN),這個黃頁總是一樣的?
PD:在控制檯上,我在消息「out.handlemessage」中顯示Mapper捕獲異常時打印的消息。
謝謝。
玉傢伙,謝謝,我終於找到了我所需要的:我添加了一個自定義異常,如: 公共類DwsWebServiceException擴展WebApplicationException { 公共DwsWebServiceException(字符串消息,詮釋狀態){ 超(響應。狀態(狀態).entity(消息).TYPE(MediaType.TEXT_XML).build()); } } 它顯示消息。 – jomaora