Spring boot API RESTful: проблема с обработкой ошибок при запросах

#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 трудно сказать. БР