source

Spring Boot 화이트라벨 오류 페이지(type=Not Found, status=404)

manycodes 2023. 6. 20. 21:44
반응형

Spring Boot 화이트라벨 오류 페이지(type=Not Found, status=404)

안녕하세요!스프링 스터디를 시작합니다. 같은 방법으로 튜토리얼을 따르는데 오류가 반환됩니다.

enter image description here

폴더 구조:

enter image description here

이상한 것은: "EventoController.java"를 br.com 에 삽입하면 됩니다.SpringApp.SpringApp, 올바르게 작동합니다.

package br.com.SpringApp.SpringApp;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringAppApplication {

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

.

package br.com.SpringApp.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class EventoController {

    @RequestMapping("/cadastroEvento")
    public String form() {      
        return "evento/formEvento"; 
    }

}

요청하신 대로 pom.xml을 추가합니다.

   <?xml version="1.0" encoding="UTF-8"?>
   <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>br.com.SpringApp</groupId>
    <artifactId>SpringApp</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>SpringApp</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.10.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


   </project>

누가 제가 어디가 틀렸는지 말씀해 주시겠어요?

기본 클래스가 다른 클래스보다 높은 루트 패키지에 있는지 확인합니다.

SpringBootApplication(@SpringBootApplication으로 주석이 달린 클래스)을 실행하면 Spring은 기본 클래스 패키지 아래의 클래스만 검색합니다.

그래서 당신의 선언은 다음과 같습니다.

package br.com.SpringApp.SpringApp; SpringApp 애플리케이션과 같은 주요 클래스 내에서

package br.com.SpringApp.SpringApp.controller; 컨트롤러 이름(EventoController 및 인덱스Controller)

package br.com.SpringApp.SpringApp.model; 당신의 모델의 이름, 즉 Evento.

이 작업이 끝나면 프로젝트를 정리하고 스프링 부트 응용 프로그램을 다시 실행합니다.

pom.xml 내에 올바른 타임리프 종속성이 있는지 확인합니다.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>      
</dependency>

솔루션:사용 중인 경우@Controller그러면 컨트롤러 클래스를 통해 MVC 컨트롤러 클래스로 처리됩니다.그러나 RESTFull 웹 서비스에서 특수 컨트롤러를 사용하려면 다음을 사용해야 합니다.@Controller와 함께@ResponseBody주석 또는 직접 사용할 수 있습니다.@RestController저쪽에Controller클래스. RestFull 웹 서비스로 SpringBoot 프로젝트를 만들 때 동일한 오류가 발생하여 효과가 있었습니다.

package br.com.SpringApp.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class EventoController {

    @RequestMapping("/cadastroEvento")
    @ResponseBody
    public String form() {      
        return "evento/formEvento"; 
    }

}

또는:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@RestController
public class EventoController {

    @RequestMapping("/cadastroEvento")
    public String form() {      
        return "evento/formEvento"; 
    }

}

다른 클래스는 주 클래스와 동일한 레벨 또는 그 아래에 있어야 합니다.또한 @Controller 또는 @RestController를 사용합니다.

@Controller
public class PrintHello {

    @RequestMapping("/hello")
    @ResponseBody
    public String helloFunction() {      
        return "hello"; 
    }

}

SpringBoot 초보자인 이 오류는 몇 가지 이유로 인해 누구에게나 한 번 이상 발생할 수 있습니다.

  1. 응용 프로그램 클래스(예: SpringAppApplication.java)는 루트 수준에 있어야 하며 컨트롤러 클래스는 동일한 수준 아래에 배치하거나 하위 디렉터리에 배치할 수 있습니다.이 응용 프로그램 클래스는 다음을 사용하여 표시해야 합니다.@SpringBootApplication또는extends from SpringBootApplication
  2. 당신은 놓칠 수도 있습니다.@RestController주석이 컨트롤러 클래스의 맨 위에 표시됩니다.
  3. 매핑 주석을 놓칠 수 있습니다. (@PostMapping("/save")또는@GetMapping("/id")등)
  4. 슬래시 또는 주석을 놓칠 수 있으므로 마지막으로 올바른 URL(요청 매핑 주소)을 입력하고 있는지 확인합니다.그렇지 않으면 철자를 다시 확인합니다.예:@RequestMapping("/customer")

Deepak에서 답변했듯이, main 클래스는 다른 패키지보다 루트 패키지에 있어야 합니다.그러나 이 작업을 수행하지 않으려면 다음을 사용할 수 있습니다.

@SpringBootApplication(scanBasePackages = {"com.other.packages","com.other"})
public class SpringAppApplication {
.....
}

GetMapping 및 PostMapping에서 name 매개 변수를 잘못 지정했습니다.

@GetMapping(name: "/all")//wrong code

실제로 경로를 직접 지정해야 합니다.

@GetMapping("/all") //correct code - remove name 

이 실수가 미래에 누구에게나 도움이 되기를 바랍니다!

다른 사용자가 이 오류를 발견한 경우:모든 파일을 저장했는지 확인합니다.

저의 경우, 모든 파일을 저장함으로써 해결되었습니다.

메서드 앞에 @ResponseBody 주석을 추가해야 합니다.

언급URL : https://stackoverflow.com/questions/49034254/spring-boot-whitelabel-error-page-type-not-found-status-404

반응형