Página de erro do arranque de mola Remover Whicanvasbel

Estou tentando remover a página de erro de etiqueta branca, então o que eu fiz foi criar um mapeamento de controlador para “/ error”,

@RestController public class IndexController { @RequestMapping(value = "/error") public String error() { return "Error handling"; } } 

Mas agora eu estou recebendo esse erro.

 Exception in thread "AWT-EventQueue-0" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerMapping' defined in class path resource [org/springframework/web/servlet/config/annotation/DelegatingWebMvcConfiguration.class]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: Ambiguous mapping found. Cannot map 'basicErrorController' bean method public org.springframework.http.ResponseEntity<java.util.Map> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletR equest) to {[/error],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}: There is already 'indexController' bean method 

Não sei se estou fazendo algo errado. Conselho por favor.

EDITAR:

Já adicionei error.whicanvasbel.enabled=false ao arquivo application.properties, ainda recebendo o mesmo erro

Você precisa alterar seu código para o seguinte:

 @RestController public class IndexController implements ErrorController{ private static final String PATH = "/error"; @RequestMapping(value = PATH) public String error() { return "Error handling"; } @Override public String getErrorPath() { return PATH; } } 

Seu código não funcionou, porque o Spring Boot registra automaticamente o BasicErrorController como um Spring Bean quando você não especificou uma implementação do ErrorController .

Para ver esse fato, navegue até ErrorMvcAutoConfiguration.basicErrorController aqui .

Se você quiser uma página de resposta mais “JSONish”, você pode tentar algo assim:

 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.web.ErrorAttributes; import org.springframework.boot.autoconfigure.web.ErrorController; import org.springframework.util.Assert; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import java.util.Map; @RestController @RequestMapping("/error") public class SimpleErrorController implements ErrorController { private final ErrorAttributes errorAttributes; @Autowired public SimpleErrorController(ErrorAttributes errorAttributes) { Assert.notNull(errorAttributes, "ErrorAttributes must not be null"); this.errorAttributes = errorAttributes; } @Override public String getErrorPath() { return "/error"; } @RequestMapping public Map error(HttpServletRequest aRequest){ Map body = getErrorAttributes(aRequest,getTraceParameter(aRequest)); String trace = (String) body.get("trace"); if(trace != null){ String[] lines = trace.split("\n\t"); body.put("trace", lines); } return body; } private boolean getTraceParameter(HttpServletRequest request) { String parameter = request.getParameter("trace"); if (parameter == null) { return false; } return !"false".equals(parameter.toLowerCase()); } private Map getErrorAttributes(HttpServletRequest aRequest, boolean includeStackTrace) { RequestAttributes requestAttributes = new ServletRequestAttributes(aRequest); return errorAttributes.getErrorAttributes(requestAttributes, includeStackTrace); } } 

Você pode removê-lo completamente, especificando:

 import org.springframework.context.annotation.Configuration; import org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration; ... @Configuration @EnableAutoConfiguration(exclude = {ErrorMvcAutoConfiguration.class}) public static MainApp { ... } 

No entanto, observe que isso provavelmente fará com que as páginas de whicanvasbel do contêiner do servlet sejam exibidas 🙂


EDIT: Outra maneira de fazer isso é via application.yaml. Basta colocar o valor:

 spring: autoconfigure: exclude: org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration 

Documentação

Para Spring Boot <2.0, a classe está localizada em package org.springframework.boot.autoconfigure.web .

O doc de boot do Spring ‘estava’ errado (eles já corrigiram):

Para desativá -lo, você pode definir error.whicanvasbel.enabled = false

deveria estar

Para desligá-lo, você pode definir server.error.whicanvasbel.enabled = false

Manual aqui diz que você tem que definir server.error.whicanvasbel.enabled para false para desativar a página de erro padrão. Talvez seja o que você quer?

Eu estou experimentando o mesmo erro após adicionar / mapeamento de erro, pelo caminho.

Com o Spring Boot> 1.4.x você pode fazer isso:

 @SpringBootApplication(exclude = {ErrorMvcAutoConfiguration.class}) public class MyApi { public static void main(String[] args) { SpringApplication.run(App.class, args); } } 

mas, em caso de exceção, o contêiner do servlet exibirá sua própria página de erro.

Isso depende da sua versão de boot:

Quando SpringBootVersion < = 1.2 , use error.whicanvasbel.enabled = false

Quando SpringBootVersion > = 1.3 , use server.error.whicanvasbel.enabled = false

No Spring Boot 1.4.1 usando modelos Mustache, colocar error.html na pasta templates será suficiente:

 < !DOCTYPE html>    Error   

Error {{ status }}

{{ error }}

{{ message }}

{{ path }}

Variáveis ​​adicionais podem ser passadas criando um interceptor para /error

server.error.whicanvasbel.enabled = false

Inclua a linha acima nas pastas Resources application.properties

Mais resolução do problema por erro, consulte http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-customize-the-whicanvasbel-error-page

Eu estava tentando chamar um ponto de extremidade REST de um microsserviço e estava usando o método put do resttemplate.

Em meu design, se algum erro ocorresse dentro do endpoint REST, ele deveria retornar uma resposta de erro JSON, ele estava funcionando para algumas chamadas, mas não para essa put , retornou a página de erro de etiqueta branca .

Então eu fiz alguma investigação e descobri isso;

spring tentar entender o chamador se é uma máquina, então, ele retorna a resposta JSON ou se é um navegador que retorna a página HTML de erro de etiqueta branca .

Como resultado: meu aplicativo cliente precisou dizer ao terminal REST que o chamador é uma máquina, não um navegador, portanto, para isso, o aplicativo cliente precisava include ‘ application / json ‘ no header ACCEPT explicitamente para o método ‘put’ do modem de repouso. Eu adicionei isso ao header e resolvi o problema.

minha chamada para o endpoint:

 restTemplate.put(url, request, param1, param2); 

para a chamada acima eu tive que adicionar abaixo o parâmetro de header.

 headers.set("Accept", MediaType.APPLICATION_JSON_UTF8_VALUE); 

ou tentei mudar de posto para trocar também, nesse caso, troca de chamadas soquei o mesmo header pra mim e resolvi o problema também mas não sei por que 🙂

 restTemplate.exchange(....)