Usei o maven para fazer o tutorial https://spring.io/guides/gs/uploading-files/
Todos os códigos que usei foram copiados.
O aplicativo pode ser executado, mas recebo o erro:
Whitelabel Error Page Este aplicativo não possui mapeamento explícito para / error, então você está vendo isso como um fallback. Ter 30 de junho 17:24:02 CST 2015 Ocorreu um erro inesperado (tipo = Não encontrado, status = 404). Nenhuma mensagem disponível
Como posso corrigir isso?
spring
spring-mvc
file-upload
upload
Deng Steve
fonte
fonte
Respostas:
Certifique-se de que sua classe principal esteja em um pacote raiz acima das outras classes.
Quando você executa um aplicativo Spring Boot, (ou seja, uma classe anotada com @SpringBootApplication), o Spring irá apenas verificar as classes abaixo do seu pacote de classe principal.
fonte
Quando criamos um aplicativo de inicialização do Spring, fazemos anotações nele
@SpringBootApplication
. Esta anotação 'envolve' muitas outras anotações necessárias para o aplicativo funcionar. Uma dessas anotações é@ComponentScan
anotação. Esta anotação diz ao Spring para procurar componentes Spring e configurar o aplicativo para rodar.Sua classe de aplicativo precisa estar no topo da sua hierarquia de pacotes, para que o Spring possa escanear subpacotes e descobrir os outros componentes necessários.
O trecho de código abaixo funciona porque o pacote do controlador está sob o
com.test.spring.boot
pacoteO snippet de código abaixo NÃO funciona porque o pacote do controlador NÃO está no
com.test.spring.boot
pacoteDa documentação do Spring Boot:
fonte
Você pode resolver isso adicionando um
ErrorController
em seu aplicativo. Você pode fazer com que o controlador de erro retorne a visualização necessária.O controlador de erro em meu aplicativo é assim:
A classe acima é baseada na classe Springs BasicErrorController .
Você pode instanciar o acima
ErrorController
assim em um@Configuration
arquivo:Você pode escolher substituir o padrão
ErrorAttributes
implementando ErrorAttributes . Mas na maioria dos casos, o DefaultErrorAttributes deve ser suficiente.fonte
BasicErrorController
aula 404s.BasicErrorController
não é mais bom, você pode atualizar?BasicErrorController
está corrigido agora.No meu caso, a classe do controlador foi anotada com
@Controller
. Mudar isso para@RestController
resolver o problema. Basicamente@RestController
é@Controller + @ResponseBody
So ou use@RestController
, ou@Controller
com@ResponseBody
anotação com cada método.Algumas notas úteis aqui: https://www.genuitec.com/spring-frameworkrestcontroller-vs-controller/
fonte
@RestController
ela implicitamente adiciona a@ResponseBody
anotação, mas se você estiver usando a@Controller
anotação, você mesmo deve adicionar explicitamente esta anotação.no meu caso, por causa da posição do pacote, o que significa que o pacote do controlador deve estar acima do pacote da classe principal
se meu pacote de classe principal é
package co.companyname.spring.tutorial;
qualquer pacote de controlador devepackage co.companyname.spring.tutorial.WHAT_EVER_HERE;
depois de terminar a codificação, pressione o painel de inicialização
uma última coisa para se certificar de que o seu controlador está mapeando ou não apenas o console, você deve ver algo smilliar
feliz codificação
fonte
Tente adicionar a dependência.
fonte
Isso acontece quando uma página de erro explícita não é definida. Para definir uma página de erro, crie um mapeamento de / error com uma visão. por exemplo, o código abaixo mapeia para um valor de string sendo retornado em caso de erro.
fonte
Adicionei essa dependência e resolveu meu problema.
fonte
Estou desenvolvendo o aplicativo Spring Boot por algumas semanas .. E eu estava pegando o mesmo erro abaixo;
Quando recebo essa mensagem de erro, percebi que meu controlador ou classe de controlador de repouso não está definido em meu projeto. Quero dizer, todos os nossos pacotes de controlador não são o mesmo pacote com a classe principal, que inclui a anotação @SpringBootApplication. Quero dizer, você precisa adicionar o nome do pacote do controlador à anotação @ComponentScan para sua classe principal que inclui a anotação @SpringBootApplication. Se você escrever códigos Abaixo, o seu problema estará resolvendo ... O mais importante é que você tem que adicionar o pacote de todos os controladores à anotação @ComponentScan como eu fiz na seção abaixo
Espero que estes códigos ajudem alguém ...
Se você encontrar outra maneira de resolver este erro ou se tiver alguma sugestão para mim, por favor, escreva para comentários ... obrigado ...
fonte
Na classe principal, após a configuração "@SpringBootApplication", adicionar "@ComponentScan" sem nenhum argumento, funcionou para mim !!!
Classe Principal:
Classe RestController:
PS: Não deixe de executar os comandos mvn clean e mvn install antes de iniciar o aplicativo
fonte
Muito tarde para a festa. De acordo com a documentação oficial do Spring, "Spring Boot instala uma página de erro de whitelabel que você vê em um cliente de navegador se encontrar um erro de servidor." https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-customize-the-whitelabel-error-page
server.error.whitelabel.enabled=false
em application.yml ou application.properties arquivo.2. A maneira recomendada é definir sua página de erro para que o usuário final possa entender. Na pasta resources / templates, crie um arquivo error.html e adicione dependência no arquivo pom.xml
O Spring escolherá automaticamente a página error.html como o modelo de erro padrão. Nota: - Não se esqueça de atualizar o projeto maven após adicionar dependência.
fonte
Você pode estar recebendo o erro, ou seja,
"Este aplicativo não possui mapeamento explícito para / error, então você está vendo isso como um substituto."
Isso ocorre porque ele não está varrendo suas classes de controlador e serviço que você tem que especificar em sua classe principal () como este,
Observação: aqui, especifiquei várias classes, como demo, controlador e serviço, a serem verificados, apenas para funcionar corretamente.
fonte
Você tem que organizar os pacotes de forma que o pacote contendo public static main (ou onde você escreveu @SpringBootApplication), seja o pai de todos os seus outros pacotes.
fonte
Por padrão, o spring boot irá escanear o pacote atual para a definição de bean. Portanto, se o seu pacote atual onde a classe principal está definida e o pacote do controlador não é o mesmo ou o pacote do controlador não é um pacote filho do seu pacote de aplicativo principal, ele não fará a varredura do controlador. Para resolver este problema, pode-se incluir uma lista de pacotes para definição de bean no pacote principal
ou crie uma hierarquia de pacote onde o pacote filho é derivado do pacote principal
fonte
O problema é que você está navegando para localhost: 8080 / em vez de localhost: 8080 / upload conforme prescrito no guia. O Spring Boot tem uma página de erro padrão usada quando você navega para uma rota indefinida para evitar fornecer detalhes específicos do servidor (que podem ser vistos como um risco de segurança).
Suas opções são: visitar a página certa, adicionar sua própria página de destino ou substituir a página de erro em branco .
Para simplificar essa situação específica, atualizei o guia para que use / em vez de / upload.
fonte
Eu sei que não é exatamente uma resposta à pergunta, mas essa pergunta é a primeira que aparece no Google :)
Problema ("Este aplicativo não possui mapeamento explícito para / erro") aparece ao tentar acessar a IU do Swagger.
No meu caso, os problemas foram causados por @RestController ("/ endpoint"), que não é tratado corretamente pelo swagger.
Então, isso resultou em erros:
E isso foi bom
fonte
isso pode acontecer se você esquecer a anotação @RestController no topo de sua classe de controlador import import org.springframework.web.bind.annotation.RestController;
e adicione a anotação como abaixo
consulte o exemplo simples abaixo
fonte
Mude @Controller para @RestController em sua classe de controlador e tudo deve correr bem.
fonte
Eu também obtive o mesmo erro e consegui resolver o erro adicionando a dependência abaixo ao meu pom.xml.
A razão é que estamos usando JSP como visão. O contêiner de servlet embutido padrão para Spring Boot Starter Web é tomcat. Para ativar o suporte para JSPs, precisaríamos adicionar uma dependência em tomcat-embed-jasper.
No meu caso, estava retornando um JSP como visualização do controlador. Espero que esta resposta ajude alguém que está lutando com o mesmo problema.
fonte
Eu estava enfrentando o mesmo problema, usando o gradle e foi resolvido ao adicionar as seguintes dependências-
antes eu estava perdendo o último causando o mesmo erro.
fonte
Eu estava enfrentando esse problema e mais tarde percebi que estava faltando a
@Configuration
anotação naMvcConfig
aula que basicamente faz o mapeamento paraViewControllers
esetViewNames
.Aqui está o conteúdo do arquivo:
Espero que isso ajude alguém !!
fonte
Certifique-se de ter jasper e jstl na lista de dependências:
Aqui está um projeto inicial em funcionamento - https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-web-jsp
Autor: Biju Kunjummen
fonte
Preciso citar esse caminho e dar a referência aos pacotes e deu certo. Você pode excluir
@EnableAutoConfiguration
esta anotação, mas é necessário que eu ignore quaisquer dependências relacionadas ao banco de dados.fonte
A classe principal precisa estar fora da estrutura de árvore dos pacotes de aplicativos. Por exemplo:
fonte
Tudo o que fiz para resolver esse tipo de problema foi mencionar a anotação @Configuration na classe MVCConfig.
Como este :
fonte
Eu tive um erro semelhante, eu uso a bota de mola e velocidade, minha solução é verificar o arquivo application.properties, spring.velocity.toolbox-config-location e descobri que esta propriedade está errada
fonte
No meu caso, esse problema ocorre ao executar o SpringApplication de dentro do IntelliJ depois de executá-lo primeiro com o maven.
Para resolver o problema, corro primeiro
mvn clean
. Em seguida, executo o SpringApplication de dentro do IntelliJ.fonte
Certifique-se de seu principal. classe deve estar no topo de seus controladores. No caso do seguinte exemplo:
Main.class contendo:
EmployeeController. classe contendo:
Se sua classe principal está na pasta raiz, assim como este caminho: {projectname} / src / main / java / main então certifique-se de seus controladores abaixo de sua classe principal. Por exemplo {projectname} / src / main / java / main / controllers .
fonte
Em seu arquivo java (digamos: Viper.java) tendo a classe principal, adicione: "@RestController" e @RequestMapping ("/")
fonte
Verifique se você marcou a classe do controlador com a anotação @RestController .
fonte