Java 如何使用JAX-RS异常上的自定义消息设置40X错误?

Java 如何使用JAX-RS异常上的自定义消息设置40X错误?,java,xml,exception-handling,xmlhttprequest,jax-rs,Java,Xml,Exception Handling,Xmlhttprequest,Jax Rs,我正在开发一个基于JAX-RS的Web服务,该服务已经在运行了。现在,我正在寻找捕获一些异常的方法,以便向用户发送带有自定义消息的40X错误 我有一个web服务和一个ExceptionMapper 这是我的web服务: @Path( value = "/test/") public interface ServiceTest { @Path(value = "{rrf}") @GET @Produces(MediaType.TEXT_XML) public Ob

我正在开发一个基于JAX-RS的Web服务,该服务已经在运行了。现在,我正在寻找捕获一些异常的方法,以便向用户发送带有自定义消息的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}");
    }
}
这是我的特例

@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();
    }
}
@Provider
@生成(MediaType.TEXT\u XML)
公共类IllegalArgumentExceptionMapper
实现ExceptionMapper{
@凌驾
公众回应(非法辩论例外e){
返回Response.status(Response.status.BAD_请求).build();
}
}
这就是它在application-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'analysis XML:aucunélément trouvé/XML解析错误:否 找到元素(英文)

如何在浏览器上显示此自定义消息? 为什么,即使我更改了响应状态(未找到、错误请求、禁止),这个黄页总是一样的

PD:在控制台上,我有一条消息“out.handlemessage”,当映射程序捕捉到异常时会打印出来


谢谢。

好的,伙计们,谢谢,我终于找到了我需要的:我添加了一个自定义异常,比如:公共类DwsWebServiceException扩展WebApplicationException{public DwsWebServiceException(字符串消息,int状态){super(Response.status(status).entity(message).type(MediaType.TEXT_XML.build());}我不知道其他JAX-RS实现,但对于我来说,使用RestEasy 3.0x,这将不起作用。它以静默方式失败,客户端没有收到响应。您需要将
.type(MediaType.TEXT\u PLAIN)
添加到
响应
生成器中的方法链中,否则它似乎会被字符串“entity”阻塞。谢谢,@Lambart,感谢您的评论:@FerranMaylinch很高兴为您提供帮助。我知道我以前也曾对这个问题和答案投过赞成票
throw new WebApplicationException(Response.status(Status.NOT_FOUND)// Or another Status
                .entity("Error Message").build());