当JAVA中不存在REST API方法时,返回JSON而不是html错误页面

时间:2015-05-05 12:25:06

标签: java rest glassfish jersey

我正在向我的Web应用程序添加REST API。所有REST地址都在../ rest / ...我想要做的是当客户端尝试调用不存在的地址时返回JSON:{error:not found}消息。例如:
../rest/users - 好的 ../rest/xxxx - 返回{error:not found}其中xxxx可以是任何字符串。 现在调用../rest/xxxx glassfish处理请求并返回html错误页面。

有没有办法禁止glassfish返回特定地址的html错误页面(../rest/ ..),并将所有不存在的url映射到将返回以JSON格式化的错误的方法。

2 个答案:

答案 0 :(得分:1)

在我开发的应用程序中,我有两个页面层次结构;返回HTML(和HTML错误消息)以及返回JSON(和JSON错误消息)的那些。

这种技术在这里可能有所帮助。

答案 1 :(得分:1)

您是否可以编写一个拦截所有请求的过滤器,并为不遵循/ rest / url模式的网址返回json响应?

例如,使用Jersey休息服务,您将拥有这样的映射

<servlet-mapping>
        <servlet-name>Jersey Rest Servlet</servlet-name>
        <url-pattern>/rest/*</url-pattern>    
    </servlet-mapping>

您可以添加带有映射的过滤器

<filter-mapping>
    <filter-name>RestFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

然后在过滤器的doFilter方法

public void doFilter(...){
   if(match using a regex pattern){
        chain.doFilter(request, response);  //matches, send it to servlet            
   }else{
        response.setContentType("application/json"); //no match, send an erro
        response.println("{error:'value'}");
    }
}

您可能需要调整过滤器模式以允许图像和此类内容,但这会让您有机会开始使用。