#java #spring #spring-boot #exception #handlerexceptionresolver
#java #spring #spring-boot #исключение #handlerexceptionresolver
Вопрос:
Я создаю RESTful API с Spring boot, но у меня возникает проблема, когда я пытаюсь обработать ошибки, касающиеся запросов.
GetUserById (код) :
@GetMapping("/user/{id}")
public User getUserById(@PathVariable("id") int idUser) throws UserIntrouvaleException {
User userFind = service.getUserById(idUser);
if(userFind == null){
throw new UserIntrouvaleException("The user with the ID " idUser "does not exist !");
}
return userFind;
}
Исключение UserIntrouvaleException (код) :
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;
@ResponseStatus(HttpStatus.NOT_FOUND)
public class UserIntrouvaleException extends RuntimeException {
public UserIntrouvaleException(String s) {
super(s);
}
}
Ошибка :
java.util.NoSuchElementException: No value present
at java.base/java.util.Optional.get(Optional.java:148) ~[na:na]
at dashboard.project.service.UserServiceImpl.getUserById(UserServiceImpl.java:33) ~[main/:na]
at dashboard.project.controller.ApiRestController.getUserById(ApiRestController.java:32) ~[main/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197) ~[spring-web-5.3.1.jar:5.3.1]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141) ~[spring-web-5.3.1.jar:5.3.1]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.1.jar:5.3.1]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:893) ~[spring-webmvc-5.3.1.jar:5.3.1]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:807) ~[spring-webmvc-5.3.1.jar:5.3.1]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.1.jar:5.3.1]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.1.jar:5.3.1]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.1.jar:5.3.1]
Комментарии:
1. объект не найден по идентификатору пользователя, вам нужно обработать его на уровне сервиса
Ответ №1:
При использовании Optional попробуйте проверить, имеет ли возвращаемый optional какое-либо значение, используя optional.isPresent(), а затем выполните любые операции с optional .
Было бы полезно, если бы вы могли добавить логику в service.getUserById()
Комментарии:
1. @Ревет. И почему вы хотите вернуть null, если user не существует?
2. @Rana_S: Возможно, я немного поторопился с этим, без источника
UserServiceImpl
трудно сказать. БР