Can*_*dın 1 java spring controller exception
我想在服务层抛出异常:
List<String> cellValuesOfTheRow = getColumnValuesForRow(row, false);
logger.info("currentRowNumber: {}, cellValuesOfTheRow: {}", currentRowNumber, cellValuesOfTheRow);
if (cellValuesOfTheRow.contains(null)) {
throw new NullFieldValueException(currentRowNumber);
}
Run Code Online (Sandbox Code Playgroud)
如果该列表包含空值,我希望它抛出异常。
我做了一个自定义例外:
public class NullFieldValueException extends RuntimeException {
private static final long serialVersionUID = -8460356990632230194L;
int currentRowNumber;
public NullFieldValueException(int currentRowNumber) {
super();
this.currentRowNumber = currentRowNumber;
}
}
Run Code Online (Sandbox Code Playgroud)
我也有控制器建议:
List<String> cellValuesOfTheRow = getColumnValuesForRow(row, false);
logger.info("currentRowNumber: {}, cellValuesOfTheRow: {}", currentRowNumber, cellValuesOfTheRow);
if (cellValuesOfTheRow.contains(null)) {
throw new NullFieldValueException(currentRowNumber);
}
Run Code Online (Sandbox Code Playgroud)
这是来自messages/messages_en.properties:
#nullpointer
error.null.field.value=Empty or null value for the row number: {0}
Run Code Online (Sandbox Code Playgroud)
这是messageconfig:
@Configuration
public class MessageConfig {
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource
= new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:messages/messages");
messageSource.setDefaultEncoding("UTF-8");
messageSource.setUseCodeAsDefaultMessage(true);
return messageSource;
}
@Bean
public LocalValidatorFactoryBean getValidator() {
LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean();
bean.setValidationMessageSource(messageSource());
return bean;
}
}
Run Code Online (Sandbox Code Playgroud)
但它给出了错误:
java.lang.IllegalStateException: Could not resolve parameter [0] in public org.springframework.http.ResponseEntity<com.example.demo.response.ErrorResponse> com.example.demo.config.GenericExceptionHandler.handle(java.lang.String,java.util.Locale): No suitable resolver
at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:164) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:134) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver.doResolveHandlerMethodException(ExceptionHandlerExceptionResolver.java:407) ~[spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.servlet.handler.AbstractHandlerMethodExceptionResolver.doResolveException(AbstractHandlerMethodExceptionResolver.java:61) [spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver.resolveException(AbstractHandlerExceptionResolver.java:141) [spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.servlet.handler.HandlerExceptionResolverComposite.resolveException(HandlerExceptionResolverComposite.java:80) [spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.processHandlerException(DispatcherServlet.java:1300) [spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1111) [spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1057) [spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) [spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) [spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) [spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at
Run Code Online (Sandbox Code Playgroud)
那么将controlleradvice和自定义异常一起使用是错误的吗?
您的 ExceptionHandler 期望抛出的 Exception 作为第一个参数,而不是intcurrentRowNumber:
@ExceptionHandler(NullFieldValueException.class)
public ResponseEntity<ErrorResponse> handle(NullFieldValueException e, Locale locale) {
int rowNumber = e.getCurrentRowNumber();
...
}
Run Code Online (Sandbox Code Playgroud)
并getCurrentRowNumber()在您的异常类中添加一个 getter来检索行号。
| 归档时间: |
|
| 查看次数: |
5444 次 |
| 最近记录: |