Spring Boot 错误:Optional int 参数 'id' 无法转换为 null 值
Spring Boot 错误:Optional int 参数 'id' 无法转换为 null 值
错误信息:
2023-04-05 00:57:32,864 [ERROR] [http-nio-6060-exec-6] o.a.c.c.C.[Tomcat].[localhost].[/].[dispatcherServlet] [DirectJDKLog.java : 182] Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.IllegalStateException: Optional int parameter 'id' is present but cannot be translated into a null value due to being declared as a primitive type. Consider declaring it as object wrapper for the corresponding primitive type.] with root cause
java.lang.IllegalStateException: Optional int parameter 'id' is present but cannot be translated into a null value due to being declared as a primitive type. Consider declaring it as object wrapper for the corresponding primitive type.
at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.handleNullValue(AbstractNamedValueMethodArgumentResolver.java:244)
at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:114)
at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:124)
at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:161)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:131)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:877)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:783)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:974)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:877)
错误原因:
该错误通常发生在使用 Spring Boot 框架开发 Web 应用时,当请求参数中包含一个名为 'id' 的可选整数参数(Optional int parameter 'id')时,且该参数的值为空或无法被解析成整数时,就会出现此错误。这是因为 Optional 类无法将 null 值转换为原始数据类型(primitive type)的整数(int)。
解决方案:
将 int 类型参数改为 Integer 类型,以便可以接受 null 值。例如:
// 原始代码:
public String getUserById(@RequestParam Optional<Integer> id) {
// ...
}
// 修改后的代码:
public String getUserById(@RequestParam Optional<Integer> id) {
// ...
}
通过将 int 改为 Integer,Optional 类可以将 null 值转换为 Integer 对象,从而避免了该错误。
总结:
Spring Boot 应用中出现的 “Optional int 参数 'id' 无法转换为 null 值” 错误是由于 Optional 类无法将 null 值转换为 int 类型导致的。解决方案是将 int 类型改为 Integer 类型,以便可以接受 null 值。
原文地址: https://www.cveoy.top/t/topic/m1Xq 著作权归作者所有。请勿转载和采集!