Spring Boot 2.2.5 page 404 introuvable réponse json personnalisée


mhndev:

Comment puis-je avoir un json personnalisé pour mes 404 pages? en fait, ce dont j'ai besoin est de pouvoir créer des erreurs json personnalisées pour mon application. par exemple pour 404,401,403,422, ... j'ai beaucoup cherché et ce que j'ai trouvé est:

package ir.darsineh.lms.http.exceptionHandler;

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.NoHandlerFoundException;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@ControllerAdvice
public class CustomExceptionHandler extends ResponseEntityExceptionHandler {


    @ExceptionHandler(NoHandlerFoundException.class)
    public void springHandleNotFound(HttpServletResponse response) throws IOException {
        response.sendError(HttpStatus.NOT_FOUND.value());
    }


}

et voici l'erreur que j'obtiens:

Ambiguous @ExceptionHandler method mapped for [class org.springframework.web.servlet.NoHandlerFoundException]

J'ai besoin que mon corps de réponse API json ressemble à ceci:

{"code": 404, "message": "page not found"}
Hamid Mohayeji:

Tout d'abord, vous devez laisser Spring MVC lever une exception si aucun gestionnaire n'est trouvé:

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

Ensuite, l'exception doit être interceptée à l'aide d'un @ControllerAdvice:

@ControllerAdvice
public class CustomAdvice {

    // 404
    @ExceptionHandler({ NoHandlerFoundException.class })
    @ResponseBody
    @ResponseStatus(HttpStatus.NOT_FOUND)
    public CustomResponse notFound(final NoHandlerFoundException ex) {
        return new CustomResponse(HttpStatus.NOT_FOUND.value(), "page not found");
    }
}

@Data
@AllArgsConstructor
class CustomResponse {
    int code;
    String message;
}

N'oubliez pas d'ajouter l'annotation @EnableWebMvc à votre application.

Articles connexes


Page d'erreur Spring Boot et 404 personnalisée

brunoïde: Dans mon application Spring Boot, j'essaie de configurer des pages d'erreur personnalisées, par exemple pour 404, j'ai ajouté un bean suivant à la configuration de mon application: @Bean public EmbeddedServletContainerCustomizer containerCustomizer()

Page d'erreur 404 personnalisée dans Spring-boot

utilisateur1583209 J'essaie de créer une page d'erreur personnalisée pour une URL non valide dans SpringMvc (Spring-boot version 1.5.1). Afin de désactiver la page d'erreur de marque blanche par défaut, j'ai : application.properties spring.thymeleaf.cache=fals

Spring Boot/Sécurité - Page 404 personnalisée

PDStat J'ai créé une page d'erreur 404 personnalisée dans mon application Spring Boot, j'utilise également Spring Security et j'ai un point d'entrée d'authentification avec un certain nombre d'URL autorisées (page d'erreur incluse dans cette liste). Ce que je

Spring Boot - page 404 personnalisée avec Tomcat autonome

derrière J'exécute une application de démarrage Spring dans une instance Tomcat autonome et j'essaie de remplacer les pages d'erreur. D'après ce que je comprends, Spring fournit un filtre ErrorPageFilter qui me permet de simplement configurer les pages d'erreu

(yii2) page d'erreur 404 introuvable

STepHan Ceci est mon SiteController public function actionIndex(){ $data['book']=[ ['id'=>1] ['id'=>2] ['id'=>3] ]; return $this->render('index',$data); } public function actionView($id){

Test de Spring Boot 2 avec réponse binaire

user2813807: J'ai un service qui renvoie un fichier zip. Cela fonctionne bien dans dev / prod, un simple GET / content / {id} / zip téléchargera le fichier dans mon navigateur. @GetMapping(value = "/content/{id}/zip") public ResponseEntity<byte[]> getContentZi

Spring Boot 2.1.0 release Erreur 404 introuvable

user3212324: J'ai essayé d'exécuter Spring Boot dans la version 2.1.0. J'obtiens une erreur 404 même en essayant d'accéder à localhost: 8080. J'ai modifié tous les contrôleurs, service dans le même package principal mais pas de chance. Toute aide est appréciée