如何在 JAX-RS 异常上使用定制消息设置 40X 错误?

我正在JAX-RS上处理一个已经工作的Web服务。现在,我正在寻找捕获一些异常的方法,以便向用户发送带有自定义消息的40X错误。

我有一个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}");
    }
}

这是我的异常映射器

@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();
    }
}

这就是它在应用程序上下文上的注册方式.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 (英文)

如何在浏览器上显示此自定义消息?为什么即使我更改了响应状态的类型(NOT_FOUND,BAD_REQUEST,禁止),此黄页也始终相同?

PD:在控制台上,我有一条消息“out.handlemessage”,当Mapper捕获异常时,它会打印出来。

谢谢。


答案 1
throw new WebApplicationException(Response.status(Status.NOT_FOUND)// Or another Status
                .entity("Error Message").build());

答案 2

推荐