add exception handler for object not found

This commit is contained in:
rayankonecny 2025-11-30 02:51:58 +00:00
parent d144587ee4
commit 042fd2637e
16 changed files with 114 additions and 4 deletions

3
.vscode/settings.json vendored Normal file
View file

@ -0,0 +1,3 @@
{
"java.compile.nullAnalysis.mode": "disabled"
}

View file

@ -9,8 +9,53 @@
<version>1.0.0</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<!-- Alvo oficial agora é Java 21 -->
<maven.compiler.release>21</maven.compiler.release>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.32</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
<version>3.0.2</version>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.1.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.13.0</version>
<configuration>
<!-- Compilação nativa para Java 21 -->
<release>21</release>
<!-- Annotation processors explícitos garantem estabilidade -->
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.32</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
</project>

View file

@ -0,0 +1,9 @@
package main.java.models.exceptions;
public class ResourceNotFoundException extends RuntimeException {
public ResourceNotFoundException(final String message) {
super(message);
}
}

View file

@ -0,0 +1,16 @@
package main.java.models.exceptions;
import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
import lombok.Builder;
@Getter
@Builder
public class StandardError {
private LocalDateTime timestamp;
private Integer status;
private String error;
private String message;
private String path;
}

View file

@ -1,2 +1,5 @@
main/java/models/enums/ProfileEnum.class
main/java/models/exceptions/ResourceNotFoundException.class
main/java/models/exceptions/StandardError$StandardErrorBuilder.class
main/java/models/responses/UserResponse.class
main/java/models/enums/ProfileEnum.class
main/java/models/exceptions/StandardError.class

View file

@ -1,2 +1,4 @@
/home/dev/projetos/Help Desk 2.0/hd-commons-lib/src/main/java/models/enums/ProfileEnum.java
/home/dev/projetos/Help Desk 2.0/hd-commons-lib/src/main/java/models/exceptions/ResourceNotFoundException.java
/home/dev/projetos/Help Desk 2.0/hd-commons-lib/src/main/java/models/exceptions/StandardError.java
/home/dev/projetos/Help Desk 2.0/hd-commons-lib/src/main/java/models/responses/UserResponse.java

View file

@ -0,0 +1,29 @@
package br.com.rayankonecny.userserviceapi.controller.exceptions;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import jakarta.servlet.http.HttpServletRequest;
import main.java.models.exceptions.ResourceNotFoundException;
import main.java.models.exceptions.StandardError;
import static java.time.LocalDateTime.now;
import static org.springframework.http.HttpStatus.NOT_FOUND;
@ControllerAdvice
public class ControllerExceptionHandler {
@ExceptionHandler(ResourceNotFoundException.class)
ResponseEntity<StandardError> handleNotFoundException(final ResourceNotFoundException ex, final HttpServletRequest request) {
return ResponseEntity.status(NOT_FOUND).body(
StandardError.builder()
.timestamp(now())
.status(NOT_FOUND.value())
.error("Resource Not Found")
.message(ex.getMessage())
.path(request.getRequestURI())
.build());
}
}

View file

@ -6,6 +6,7 @@ import br.com.rayankonecny.userserviceapi.mapper.UserMapper;
import br.com.rayankonecny.userserviceapi.repository.UserRepository;
import lombok.RequiredArgsConstructor;
import main.java.models.responses.UserResponse;
import main.java.models.exceptions.ResourceNotFoundException;
@Service
@RequiredArgsConstructor
@ -15,7 +16,9 @@ public class UserService {
private final UserMapper userMapper;
public UserResponse findById(final String id) {
return userMapper.fromEntity(userRepository.findById(id).orElse(null));
return userMapper.fromEntity(userRepository.findById(id)
.orElseThrow(() -> new ResourceNotFoundException(
"Object not found! Id: " + id + ", Type: " + UserResponse.class.getSimpleName())));
}
}