【发布时间】:2019-05-27 04:36:48
【问题描述】:
我想在我的 Spring Boot 应用程序中自定义 DefaultHandlerExceptionResolver,但发生异常时从未达到自定义实现。
build.gradle
buildscript {
ext {
springBootVersion = '2.1.1.RELEASE'
}
repositories {
mavenCentral()
}
}
plugins {
id 'java'
id 'org.springframework.boot' version '2.1.1.RELEASE'
id 'io.spring.dependency-management' version '1.0.6.RELEASE'
id 'io.franzbecker.gradle-lombok' version '1.14'
}
lombok {
version = '1.18.4'
sha256 = ""
}
group = 'ua.com.javaman'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
implementation('org.springframework.boot:spring-boot-starter-web')
}
Application.java
@SpringBootApplication
@RestController
@Configuration
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@ResponseBody
@PostMapping("/mouse")
public Mouse postMouse(@Valid Mouse mouse) {
// mouse creation logic
return mouse;
}
@Bean
public HandlerExceptionResolver customHandlerExceptionResolver() {
return new CustomExceptionHandlerResolver();
}
}
Mouse.java
@Value
public class Mouse {
private final Long id;
@NotEmpty
@Min(2)
private final String name;
}
CustomExceptionHandlerResolver.java
public class CustomExceptionHandlerResolver extends DefaultHandlerExceptionResolver {
@Override
protected ModelAndView handleBindException(
BindException ex, HttpServletRequest request, HttpServletResponse response, @Nullable Object handler
) throws IOException {
System.out.println("In CustomExceptionHandlerResolver");
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
return new ModelAndView();
}
}
包结构
.
├── build.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── LICENSE
├── README.md
├── settings.gradle
└── src
└── main
└── java
└── ua
└── com
└── javaman
└── exception_handling
├── Application.java
├── CustomExceptionHandlerResolver.java
└── Mouse.java
当我使用错误的 Mouse 实体值调用应用程序时,例如,
POST localhost:8080/mouse?name=1
比DefaultHandlerExceptionResolver 中的handleBindException() 方法被调用,但在我的CustomExceptionHandlerResolver 中没有被调用。
如何用我的CustomExceptionHandlerResolver 处理BindException?
【问题讨论】:
-
你在
CustomExceptionHandlerResolver上错过了@Component -
@Deadpool 添加
@Component没有解决我的问题 -
同时显示包结构
-
@Deadpool 我添加了包结构
标签: java spring spring-mvc spring-boot exception-handling