Skip to content

Commit b34ad1f

Browse files
chore(spring-kafka-test): geral adjustments
1 parent 7d92821 commit b34ad1f

File tree

9 files changed

+51
-18
lines changed

9 files changed

+51
-18
lines changed

spring-kafka-example/pom.xml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
<spring.boot.version>3.5.4</spring.boot.version>
2424
<spring.kafka.version>3.3.8</spring.kafka.version>
2525
<lombok.version>1.18.38</lombok.version>
26+
<jakarta.validation.version>3.1.1</jakarta.validation.version>
2627
</properties>
2728

2829
<dependencies>
@@ -33,6 +34,12 @@
3334
<version>${spring.boot.version}</version>
3435
</dependency>
3536

37+
<dependency>
38+
<groupId>org.springframework.boot</groupId>
39+
<artifactId>spring-boot-starter-validation</artifactId>
40+
<version>${spring.boot.version}</version>
41+
</dependency>
42+
3643
<dependency>
3744
<groupId>org.springframework.kafka</groupId>
3845
<artifactId>spring-kafka</artifactId>
@@ -46,6 +53,12 @@
4653
<version>${lombok.version}</version>
4754
</dependency>
4855

56+
<dependency>
57+
<groupId>jakarta.validation</groupId>
58+
<artifactId>jakarta.validation-api</artifactId>
59+
<version>${jakarta.validation.version}</version>
60+
</dependency>
61+
4962
<dependency>
5063
<groupId>org.springframework.boot</groupId>
5164
<artifactId>spring-boot-starter-test</artifactId>

spring-kafka-example/src/main/java/com/io/example/config/JacksonConfig.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,9 @@ public class JacksonConfig {
1111

1212
@Bean
1313
public ObjectMapper objectMapper() {
14-
ObjectMapper mapper = new ObjectMapper();
15-
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
16-
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
17-
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
18-
return mapper;
14+
return new ObjectMapper()
15+
.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false)
16+
.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
17+
.setSerializationInclusion(JsonInclude.Include.NON_NULL);
1918
}
2019
}

spring-kafka-example/src/main/java/com/io/example/controller/ExampleController.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.io.example.controller.dto.request.MessageRequestDtoRequest;
44
import com.io.example.controller.dto.response.SimpleTopicDtoResponse;
55
import com.io.example.producer.KafkaProducerService;
6+
import jakarta.validation.Valid;
67
import lombok.RequiredArgsConstructor;
78
import org.springframework.http.HttpStatus;
89
import org.springframework.http.ResponseEntity;
@@ -16,7 +17,7 @@ public class ExampleController {
1617
private final KafkaProducerService kafkaProducerService;
1718

1819
@PostMapping("/send/simple-topic")
19-
public ResponseEntity<SimpleTopicDtoResponse> sendMessageToSimpleTopic(@RequestBody MessageRequestDtoRequest dto){
20+
public ResponseEntity<SimpleTopicDtoResponse> sendMessageToSimpleTopic( @Valid @RequestBody MessageRequestDtoRequest dto){
2021
this.kafkaProducerService.sendMessage(dto);
2122
return ResponseEntity.status(HttpStatus.OK).body(new SimpleTopicDtoResponse("Message sent successfully!"));
2223
}
Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
11
package com.io.example.controller.dto.request;
22

3-
public record MessageRequestDtoRequest(String message) {}
3+
import jakarta.validation.constraints.NotBlank;
4+
import jakarta.validation.constraints.NotNull;
5+
6+
public record MessageRequestDtoRequest(
7+
@NotNull(message = "message cannot be null.")
8+
@NotBlank(message = "message cannot be blank.")
9+
String message
10+
) {}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
package com.io.example.controller.dto.response;
22

3-
public record SimpleTopicDtoResponse(String message) {}
3+
public record SimpleTopicDtoResponse( String message) {}

spring-kafka-example/src/main/java/com/io/example/exception/handler/GlobalExceptionHandler.java

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import lombok.extern.slf4j.Slf4j;
66
import org.springframework.http.HttpStatus;
77
import org.springframework.http.ResponseEntity;
8+
import org.springframework.validation.FieldError;
9+
import org.springframework.web.bind.MethodArgumentNotValidException;
810
import org.springframework.web.bind.annotation.ControllerAdvice;
911
import org.springframework.web.bind.annotation.ExceptionHandler;
1012

@@ -14,11 +16,25 @@
1416
public class GlobalExceptionHandler {
1517

1618
@ExceptionHandler(RuntimeException.class)
17-
public ResponseEntity<ResponseEntity<Error>> handleRuntimeException(RuntimeException ex, HttpServletRequest s) {
19+
public ResponseEntity<Error> handleRuntimeException(RuntimeException ex, HttpServletRequest s) {
1820
log.error("HandleRuntimeException= {}", ex.getMessage());
19-
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
20-
.body(Error.response(ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR, s));
21+
return Error.response(ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR, s);
2122
}
2223

24+
@ExceptionHandler(MethodArgumentNotValidException.class)
25+
public ResponseEntity<Error> handleMethodArgumentNotValidException(MethodArgumentNotValidException ex, HttpServletRequest s) {
26+
log.error("HandleMethodArgumentNotValidException= {}", ex.getMessage());
27+
return Error.response(this.getFirstErrorMessage(ex), HttpStatus.BAD_REQUEST, s);
28+
29+
}
30+
31+
private String getFirstErrorMessage(MethodArgumentNotValidException e) {
32+
return e.getBindingResult()
33+
.getFieldErrors()
34+
.stream()
35+
.findFirst()
36+
.map(FieldError::getDefaultMessage)
37+
.orElse(e.getMessage());
38+
}
2339

2440
}

spring-kafka-example/src/main/java/com/io/example/exception/responseBody/Error.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,12 @@
11
package com.io.example.exception.responseBody;
22

3-
import jakarta.servlet.ServletRequest;
43
import jakarta.servlet.http.HttpServletRequest;
54
import lombok.AllArgsConstructor;
65
import lombok.Builder;
76
import lombok.Data;
87
import lombok.NoArgsConstructor;
98
import org.springframework.http.HttpStatus;
109
import org.springframework.http.ResponseEntity;
11-
import org.springframework.web.server.ServerWebExchange;
12-
1310
import java.time.Instant;
1411
import java.time.ZoneId;
1512
import java.time.format.DateTimeFormatter;
@@ -24,12 +21,12 @@ public class Error {
2421
private Integer status;
2522
private String error;
2623

27-
public static ResponseEntity<Error> response(String message, HttpStatus status, HttpServletRequest uri){
24+
public static ResponseEntity<Error> response(String message, HttpStatus status, HttpServletRequest request){
2825
return ResponseEntity
2926
.status(status)
3027
.body(Error.builder()
3128
.timestamp(getInstantNow())
32-
.path(uri.getRequestURI())
29+
.path(request.getRequestURI())
3330
.status(status.value())
3431
.error(message)
3532
.build());

spring-kafka-example/src/main/java/com/io/example/mapper/JsonMapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public <T> T toObject(String jsonBody, Class<T> typeClass){
2727
return objectMapper.readValue(jsonBody, typeClass);
2828
} catch (JsonProcessingException e) {
2929
log.error("error converting an String to object. cause of the error: {}", e.getMessage());
30-
throw new RuntimeException("Object deserialization failed", e);
30+
throw new IllegalArgumentException("Object deserialization failed for target type: " + typeClass.getSimpleName(), e);
3131
}
3232
}
3333

spring-kafka-example/src/main/java/com/io/example/producer/KafkaProducerService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@
44

55
@FunctionalInterface
66
public interface KafkaProducerService {
7-
void sendMessage(MessageRequestDtoRequest mensagem);
7+
void sendMessage(MessageRequestDtoRequest message);
88
}

0 commit comments

Comments
 (0)