Grails 是否可以为404';设置全局品牌错误页面;这是一个使用dropwizard的向导

Grails 是否可以为404';设置全局品牌错误页面;这是一个使用dropwizard的向导,grails,embedded-jetty,dropwizard,Grails,Embedded Jetty,Dropwizard,我发现自己正在使用一个grails应用程序,该应用程序被部署为一个胖jar,由一个使用dropwizard配置jetty的自定义插件构建 似乎dropwizard不允许使用普通的web.xml或jetty.xml,而是在启动时由java配置设置(即使用com.yammer.dropwizard.config.Environment) 我是不是遗漏了什么?是否有办法将404映射回URL或任何我可以覆盖的网页,从而使Jetty 404不是默认的 (是的,我知道我可以使用负载平衡器来重定向404s)我

我发现自己正在使用一个grails应用程序,该应用程序被部署为一个胖jar,由一个使用dropwizard配置jetty的自定义插件构建

似乎dropwizard不允许使用普通的web.xml或jetty.xml,而是在启动时由java配置设置(即使用com.yammer.dropwizard.config.Environment)

我是不是遗漏了什么?是否有办法将404映射回URL或任何我可以覆盖的网页,从而使Jetty 404不是默认的


(是的,我知道我可以使用负载平衡器来重定向404s)

我不知道它在grails中是如何实现的,但这在java中有助于dropwizard 0.7.1 run()方法:

为异常映射创建此类->返回单个响应

@Provider
public class RestErrorsHandler implements ExceptionMapper<Exception> {

/**
 * Deletes all ExpetionMappers.
 * 
 * @param jrConfig
 */
public RestErrorsHandler(
    ResourceConfig jrConfig)
{
    // Remove all of Dropwizard's custom ExceptionMappers
    Set<?> dwSingletons = jrConfig.getSingletons();
    List<Object> singletonsToRemove = new ArrayList<Object>();
    for (Object s : dwSingletons) {
            // Remove all Exception mappers
            if (s instanceof ExceptionMapper) {
                singletonsToRemove.add(s);
            }
    }
    for (Object s : singletonsToRemove) {
        jrConfig.getSingletons().remove(s);
    }
}

public Response toResponse(
    Exception exception)
{   
    //Handle different exceptions in another way
    if (exception.getClass().equals(JsonParseException.class)){
        Response response = RestErrorsHandler.generalResponse(exception);
        return response ;
    } else if(exception.getClass().equals(JsonParseException.class)){
        Response response = RestErrorsHandler.generalResponse(exception);
        return response ;
    } else if(exception.getClass().equals(Class.class)){
        Response response = RestErrorsHandler.generalResponse(exception);
        return response ;
    }

    //genral problem -> output default
    Response response = RestErrorsHandler.generalResponse(exception);
    return response ;

}

public static Response generalResponse(Exception exception)
{
    return Response.status(Status.BAD_REQUEST).type(MediaType.TEXT_PLAIN)
        .entity("if you just want to give back a string, but could also be default html page or whatever").build();
}



}
@Provider
公共类RestErrorsHandler实现ExceptionMapper{
/**
*删除所有ExpectionMapper。
* 
*@param jrConfig
*/
公共再培训商(
资源配置(jrConfig)
{
//删除Dropwizard的所有自定义例外标记
设置dwSingletons=jrConfig.getSingletons();
List singletonsToRemove=new ArrayList();
对于(对象:DWS单例){
//删除所有异常映射程序
如果(s例外情况出现的实例){
singletonsToRemove.add(s);
}
}
对于(对象s:singletonsToRemove){
jrConfig.getSingleton().remove;
}
}
公众回应(
例外情况(例外情况)
{   
//以另一种方式处理不同的异常
if(exception.getClass().equals(JsonParseException.class)){
Response Response=RestErrorsHandler.generalResponse(异常);
返回响应;
}else if(exception.getClass().equals(JsonParseException.class)){
Response Response=RestErrorsHandler.generalResponse(异常);
返回响应;
}else if(exception.getClass().equals(Class.Class)){
Response Response=RestErrorsHandler.generalResponse(异常);
返回响应;
}
//一般问题->输出默认值
Response Response=RestErrorsHandler.generalResponse(异常);
返回响应;
}
公共静态响应generalResponse(异常)
{
返回响应.status(status.BAD\u REQUEST).type(MediaType.TEXT\u PLAIN)
.entity(“如果您只想返回一个字符串,但也可以是默认的html页面或任何内容”).build();
}
}

你试过了吗?是的,它们可以处理500个错误,但不能处理404s应该可以。你的Grails版本是什么?您是如何声明404映射的?
@Provider
public class RestErrorsHandler implements ExceptionMapper<Exception> {

/**
 * Deletes all ExpetionMappers.
 * 
 * @param jrConfig
 */
public RestErrorsHandler(
    ResourceConfig jrConfig)
{
    // Remove all of Dropwizard's custom ExceptionMappers
    Set<?> dwSingletons = jrConfig.getSingletons();
    List<Object> singletonsToRemove = new ArrayList<Object>();
    for (Object s : dwSingletons) {
            // Remove all Exception mappers
            if (s instanceof ExceptionMapper) {
                singletonsToRemove.add(s);
            }
    }
    for (Object s : singletonsToRemove) {
        jrConfig.getSingletons().remove(s);
    }
}

public Response toResponse(
    Exception exception)
{   
    //Handle different exceptions in another way
    if (exception.getClass().equals(JsonParseException.class)){
        Response response = RestErrorsHandler.generalResponse(exception);
        return response ;
    } else if(exception.getClass().equals(JsonParseException.class)){
        Response response = RestErrorsHandler.generalResponse(exception);
        return response ;
    } else if(exception.getClass().equals(Class.class)){
        Response response = RestErrorsHandler.generalResponse(exception);
        return response ;
    }

    //genral problem -> output default
    Response response = RestErrorsHandler.generalResponse(exception);
    return response ;

}

public static Response generalResponse(Exception exception)
{
    return Response.status(Status.BAD_REQUEST).type(MediaType.TEXT_PLAIN)
        .entity("if you just want to give back a string, but could also be default html page or whatever").build();
}



}