相关疑难解决方法(0)

Spring Boot删除Whitelabel错误页面

我正在尝试删除白标错误页面,所以我所做的是为"/ error"创建了一个控制器映射,

@RestController
public class IndexController {

    @RequestMapping(value = "/error")
    public String error() {
        return "Error handling";
    }

}
Run Code Online (Sandbox Code Playgroud)

但现在我收到了这个错误.

Exception in thread "AWT-EventQueue-0" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerMapping' defined in class path resource   [org/springframework/web/servlet/config/annotation/DelegatingWebMvcConfiguration.class]: Invocation  of init method failed; nested exception is java.lang.IllegalStateException: Ambiguous mapping found. Cannot map 'basicErrorController' bean method 
public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>>  org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletR equest)
to {[/error],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}: There is already 'indexController' bean method
Run Code Online (Sandbox Code Playgroud)

不知道我做错了什么.请指教.

编辑:

已经添加 error.whitelabel.enabled=false 到application.properties文件中,仍然会收到相同的错误

spring spring-boot

146
推荐指数
9
解决办法
24万
查看次数

如何使用Spring MVC/Spring Boot编写正确的全局错误处理程序

我正在编写一个使用Spring 4.0.4和Spring Boot 1.0.2的Web应用程序,使用Tomcat作为嵌入式Web容器,我想实现一个全局异常处理,它拦截所有异常并以特定方式记录它们.我的简单要求是:

  • 我想全局处理尚未在其他地方处理的所有异常(例如在控制器异常处理程序中).我想记录消息,我想向用户显示自定义错误消息.
  • 我不希望Spring或Web容器自己记录任何错误,因为我想自己这样做.

到目前为止,我的解决方案看起来像这样(简化,没有日志记录,也没有重定向到错误视图):

@Controller
@RequestMapping("/errors")
public class ErrorHandler implements EmbeddedServletContainerCustomizer
{
    @Override
    public void customize(final ConfigurableEmbeddedServletContainer factory)
    {
        factory.addErrorPages(new ErrorPage("/errors/unexpected"));
        factory.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/errors/notfound"));
    }

    @RequestMapping("unexpected")
    @ResponseBody
    public String unexpectedError(final HttpServletRequest request)
    {
        return "Exception: " + request.getAttribute("javax.servlet.error.exception");
    }

    @RequestMapping("notfound")
    @ResponseBody
    public String notFound()
    {
        return "Error 404";
    }
}
Run Code Online (Sandbox Code Playgroud)

结果是该unexpectedError方法正确处理控制器中抛出的异常,并且该方法处理404状态代码notFound.到目前为止很好,但我有以下问题:

  • Tomcat或Spring(不确定谁负责)仍在记录错误消息.我不希望这样,因为我想自己记录(附加信息),我不希望日志中出现重复的错误消息.如何防止此默认日志记录?
  • 我访问异常对象的方式似乎不对.我从request属性中获取if javax.servlet.error.exception.这甚至不是抛出的异常,它是一个实例,org.springframework.web.util.NestedServletException我必须深入到这个嵌套异常中来获取真实异常.我很确定有一种更简单的方法,但我找不到它.

那么我该如何解决这些问题呢?或者我实现这个全局异常处理程序的方式是完全错误的,还有更好的选择吗?

java spring tomcat spring-mvc spring-boot

39
推荐指数
1
解决办法
5万
查看次数

如何更改异常处理程序中的内容类型

假设我有一个服务器GET请求并返回要序列化为JSON的bean,并且还提供了一个异常处理程序IllegalArgumentException,可以在服务中引发:

@RequestMapping(value = "/meta/{itemId}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public MetaInformation getMetaInformation(@PathVariable int itemId) {
    return myService.getMetaInformation(itemId);
}

@ExceptionHandler(IllegalArgumentException.class)
@ResponseStatus(value = HttpStatus.BAD_REQUEST)
@ResponseBody
public String handleIllegalArgumentException(IllegalArgumentException ex) {
    return ExceptionUtils.getStackTrace(ex);
}
Run Code Online (Sandbox Code Playgroud)

消息转换器是:

<mvc:annotation-driven>
    <mvc:message-converters>
        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
        <bean class="org.springframework.http.converter.StringHttpMessageConverter" />
    </mvc:message-converters>
</mvc:annotation-driven>
Run Code Online (Sandbox Code Playgroud)

现在,当我在浏览器中请求给定的URL时,我看到了正确的JSON回复.但是,如果引发异常,则字符串化的异常也会转换为JSON,但我希望它能被处理StringHttpMessageConverter(产生的text/plainmime类型).我该怎么办?

为了使图片更完整(和复杂),假设我还有以下处理程序:

@RequestMapping(value = "/version", method = RequestMethod.GET)
@ResponseBody
public String getApplicationVersion() {
    return "1.0.12";
}
Run Code Online (Sandbox Code Playgroud)

此处理程序允许返回字符串由两者序列化MappingJackson2HttpMessageConverterStringHttpMessageConverter依赖于Accept-type客户端传递.返回类型和值应如下所示:

+----+---------------------+-----------------------+------------------+-------------------------------------+
| NN | URL …

spring spring-mvc mime-types

28
推荐指数
2
解决办法
3万
查看次数

标签 统计

spring ×3

spring-boot ×2

spring-mvc ×2

java ×1

mime-types ×1

tomcat ×1