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