Estou tentando remover a página de erro de etiqueta branca, então o que fiz foi criar um mapeamento de controlador para "/ error",
@RestController
public class IndexController {
@RequestMapping(value = "/error")
public String error() {
return "Error handling";
}
}
Mas agora 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<java.lang.String, java.lang.Object>> 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á foi adicionado
error.whitelabel.enabled=false
ao arquivo application.properties, ainda obtendo o mesmo erro
spring
spring-boot
Yasitha Waduge
fonte
fonte
spring.resources.add-mappings=false
?/error
caminho é chamado?Respostas:
Você precisa alterar seu código para o seguinte:
Seu código não funcionou, porque o Spring Boot registra automaticamente o
BasicErrorController
Spring Bean quando você não especificou uma implementação deErrorController
.Para ver esse fato, basta navegar até
ErrorMvcAutoConfiguration.basicErrorController
aqui .fonte
BasicErrorController
(consulte github.com/spring-projects/spring-boot/blob/… ) para realizar o que desejaErrorAttributes
objeto (contendo os detalhes do erro), mas tentei simplesmente @Automando-o e ele funciona. O que eu fiz por agora: gist.github.com/jonikarppinen/662c38fb57a23de61c8bSe você quiser uma página de resposta mais "JSONish", tente algo assim:
fonte
O documento de inicialização do Spring 'estava' errado (eles o corrigiram):
deveria estar
fonte
/error
qualquer maneira. Para liberar o/error
conjunto de terminaisserver.error.path=/error-spring
ou algum caminho alternativo.Você pode removê-lo completamente especificando:
No entanto, observe que isso provavelmente fará com que as páginas de whitelabel do contêiner do servlet sejam exibidas :)
EDIT: Outra maneira de fazer isso é via application.yaml. Basta colocar o valor:
Documentação
Para Spring Boot <2.0, a classe está localizada no pacote
org.springframework.boot.autoconfigure.web
.fonte
Manual aqui diz que você tem que definir
server.error.whitelabel.enabled
parafalse
desativar a página de erro padrão. Talvez seja o que você quer?Estou enfrentando o mesmo erro depois de adicionar / mapeamento de erros, a propósito.
fonte
/error
qualquer maneira. Para liberar o/error
conjunto de terminaisserver.error.path=/error-spring
ou algum caminho alternativo.Com o Spring Boot> 1.4.x, você pode fazer o seguinte:
mas, em caso de exceção, o contêiner do servlet exibirá sua própria página de erro.
fonte
Isso depende da sua versão de inicialização por mola:
Quando SpringBootVersion <=
1.2
, useerror.whitelabel.enabled = false
Quando SpringBootVersion > =
1.3
, useserver.error.whitelabel.enabled = false
fonte
No Spring Boot 1.4.1 usando modelos de bigode, colocar error.html na pasta de modelos será suficiente:
Variáveis adicionais podem ser passadas criando um interceptor para
/error
fonte
Aqui está um método alternativo muito semelhante à "maneira antiga" de especificar mapeamentos de erros no
web.xml
.Basta adicionar isso à sua configuração do Spring Boot:
Em seguida, você pode definir as páginas de erro no conteúdo estático normalmente.
O personalizador também pode ser um separado
@Component
, se desejado.fonte
Estou usando o Spring Boot versão 2.1.2 e a
errorAttributes.getErrorAttributes()
assinatura não funcionou para mim (na resposta de acohen). Como eu queria uma resposta do tipo JSON, fiz uma pequena pesquisa e descobri que esse método fazia exatamente o que eu precisava.Eu obtive a maioria das minhas informações neste tópico e também nesta postagem do blog .
Primeiro, criei um
CustomErrorController
que o Spring procurará mapear para qualquer erro.Segundo, criei uma
CustomHttpErrorResponse
classe para retornar o erro como JSON.Finalmente, tive que desligar o Whitelabel no
application.properties
arquivo.Isso deve funcionar mesmo para
xml
solicitações / respostas. Mas eu não testei isso. Ele fez exatamente o que estava procurando desde que estava criando uma API RESTful e só queria retornar JSON.fonte
server.error.whitelabel.enabled = false
Inclua a linha acima nas pastas Resources application.properties
Para solucionar mais problemas, consulte http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-customize-the-whitelabel-error-page
fonte
Eu estava tentando chamar um ponto de extremidade REST de um microsserviço e estava usando o método put resttemplate método .
No meu design, se ocorreu algum erro dentro do terminal REST, ele deveria retornar uma resposta de erro JSON, estava funcionando para algumas chamadas, mas não para esta, coloquei uma, retornou a página de erro de etiqueta branca em seu lugar.
Então eu fiz algumas investigações e descobri isso;
O Spring tenta entender o responsável pela chamada se for uma máquina e, em seguida, ele retornará a resposta JSON ou, se for um navegador, retornará o HTML da página de erro da etiqueta branca .
Como resultado: meu aplicativo cliente precisava dizer ao ponto de extremidade REST que o chamador é uma máquina, não um navegador. Para isso, o aplicativo cliente precisava adicionar ' application / json ' ao cabeçalho ACCEPT explicitamente para o método 'put' do restante do modelo. Eu adicionei isso ao cabeçalho e resolvi o problema.
minha chamada para o endpoint:
para a chamada acima, eu tive que adicionar abaixo os parâmetros do cabeçalho.
ou tentei alterar também o put to exchange, nesse caso, a chamada de troca adicionou o mesmo cabeçalho para mim e resolveu o problema também, mas não sei por que :)
fonte
O Spring Boot por padrão possui uma página de erro " whitelabel " que você pode ver em um navegador se encontrar um erro no servidor. Página de erro Whitelabel é uma página de erro genérica do Spring Boot que é exibida quando nenhuma página de erro personalizada é encontrada.
Defina “server.error.whitelabel.enabled = false” para alternar da página de erro padrão
fonte
Eu tive um problema semelhante com a mensagem de erro WhiteLabel no meu SPA Angular sempre que fazia uma atualização.
A correção foi criar um controlador que implementa ErrorController, mas, em vez de retornar uma String, tive que retornar um objeto ModelAndView que encaminha para /
fonte