Risposta 404 custom in Spring Boot

Mattepuffo's logo
Risposta 404 custom in Spring Boot

Risposta 404 custom in Spring Boot

In Spring Boot possiamo customizzare praticamente tutto, solo che a volte il procedimento è un pò tortuoso.

In questo articolo vediamo come personalizzare l'errore 404.

Cominciamo aggiungendo questa riga al file application.properties:

spring.mvc.throw-exception-if-no-handler-found=true

Poi dobbiamo attivare l'MVC; io ho aggiunto l'annotazione nel main:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

@SpringBootApplication
@EnableWebMvc
public class CiesApiVpsApplication {

  public static void main(String[] args) {
    SpringApplication.run(CiesApiVpsApplication.class, args);
  }

}

A questo punto creiamo una classe per la risposta custom; considerate che io uso Lombok:

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@AllArgsConstructor
public class MyErrorResponse {
  private int code;
  private String message;
}

Infine creiamo una classe per customizzare la risposta:

import com.cies.api.utils.MyErrorResponse;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.servlet.NoHandlerFoundException;

@ControllerAdvice
public class ErrorHandlerController {

  @ExceptionHandler(NoHandlerFoundException.class)
  @ResponseStatus(value = HttpStatus.NOT_FOUND)
  public ResponseEntity<MyErrorResponse> handleNoHandlerFoundException(NoHandlerFoundException ex, HttpServletRequest httpServletRequest) {
    MyErrorResponse apiMyErrorResponse = new MyErrorResponse(404, "Not found");
    return ResponseEntity.status(HttpStatus.NOT_FOUND).contentType(MediaType.APPLICATION_JSON).body(apiMyErrorResponse);
  }
}

Enjoy!


Condividi

Commentami!