programing

스프링 부트 시 안정 컨트롤러에서html 페이지를 반환하는 방법

newsource 2023. 3. 16. 21:31

스프링 부트 시 안정 컨트롤러에서html 페이지를 반환하는 방법

컨트롤러에서 간단한 html 페이지를 반환하고 싶은데 파일 이름만 표시되며 내용은 표시되지 않습니다. 왜일까요?

컨트롤러 코드는 다음과 같습니다.

@RestController
public class HomeController {

    @RequestMapping("/")
    public String welcome() {
        return "login";
    }
}

프로젝트 구조는 다음과 같습니다.

여기에 이미지 설명 입력

「」를 사용하고 @RestController음음음같 뭇매하다

@RestController
public class HomeController {

    @RequestMapping("/")
    public String welcome() {
        return "login";
    }
}

이것은 일반 컨트롤러에서 다음과 같습니다.

@Controller
public class HomeController {

    @RequestMapping("/")
    @ResponseBody
    public String welcome() {
        return "login";
    }
}

「」를 사용합니다.@ResponseBodyreturn "login";스트링 스트링됩니다.payloadJSON의 HTTP입니다.

login반응으로요.

다음의 순서에 따릅니다.

  1. html 파일을 리소스/템플릿/에 저장해야 합니다.

  2. 「 「 」를 교환해 .@RestController@Controller

  3. 뷰 리졸버를 사용하고 있는 경우는, 삭제합니다.

  4. 는 확장자를 하지 않고 파일 (예: 파일 이름).return "index"

  5. 다음 종속성을 포함합니다.

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

도 한번 .ModelAndView:

@RequestMapping("/")
public ModelAndView index () {
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.setViewName("index");
    return modelAndView;
}

@kukkuz는 '왜?'라는 질문에 거의 대답했습니다.아직 '어떻게'를 알아보고 있는 분들을 위해, 다른 분들의 답변을 축적하고 있습니다.

Rest Controller 사용:

@RestController
public class MyRestController {
    @RequestMapping("/")
    public ModelAndView welcome() {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("login.html");
        return modelAndView;
    }  
}
  • 뷰명이 'signed'인 것에 주목해 주세요.html' (전체 파일 이름)을 지정합니다.
  • 또한 파일이 있는 위치도 중요합니다.기본적으로 login.display는 resources/static 또는 resources/public에 있어야 합니다.

다음과 같은 기본 접미사에 대한 응용 프로그램 매개 변수를 설정할 수 있습니다.

 spring.mvc.view.suffix=.html

이 경우 보기 이름은 'filename'처럼 확장자가 없어야 합니다.

일부에서는 thymeleaf를 사용할 수 있다고 제안하고 있습니다.즉, 다음과 같은 pom.xml 의존관계를 가지고 있습니다.

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

이 시나리오에서는 기본적으로 login.html은 resources/templates 폴더에 배치해야 합니다.또, 콜의 차이는 뷰명에 있습니다.이는 .html이 기본값으로 사용되고 있기 때문입니다.

//  fails by default
//  NO fail if spring mvc view suffix is set in properties e.g.: spring.mvc.view.suffix=.html
//  NO fail if thymeleaf is added, and there is a file login.html in a resources/templates folder.
@RequestMapping("/loginTest")
public ModelAndView loginTest () {
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.setViewName("login");
    return modelAndView;
}

컨트롤러 사용:

@Controller
public class MyController {

  //gets html from a default 'resources/public' or 'resources/static' folder
  @RequestMapping(path="/welcome")
  public String getWelcomePage(){
      return "login.html";
  }

  //gets html from a default 'resources/public' or 'resources/static' folder
  @RequestMapping("/welcome1")
  public ModelAndView getWelcomePageAsModel() {
      ModelAndView modelAndView = new ModelAndView();
      modelAndView.setViewName("login.html");
      return modelAndView;
  }

  //  fails with 404 resource not found by default
  //  NO fail, if spring mvc view suffix is set in properties e.g.: spring.mvc.view.suffix=.html
  //  NO fail, if thymeleaf is added, and there is a file login.html in a resources/templates folder
  @RequestMapping(path="/welcome2")
  public String thisFails(){
      return "login";
  }
}

@Restcontroller@controller@Restcontroller 및 pages되지 않습니다.jsp는 반환되지 않습니다.

난 세 가지를 했어

  • HTML 페이지를 {project.basedir}/resources/static/myPage.html에 배치합니다.
  • @RestController를 @Controller로 전환합니다.
  • 이것은 내 컨트롤러입니다.
@RequestMapping(method = RequestMethod.GET, value = "/")
public String aName() {
    return "myPage.html";
}

특별한 의존관계는 필요 없습니다.

Kukuz의 답변은 POM 파일에 의존성을 추가할 때까지 효과가 없었습니다.

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

여기 가이드부터.

여기에 기재되어 있는 레지스트리 자원의 갱신도 실시합니다.

그리고 잘 작동하기 시작했습니다.앞으로 같은 문제에 부딪혀도 첫 번째 답변을 실행해도 문제가 해결되지 않을 경우 @Kukuz의 답변 코드를 사용한 후 다음 두 단계를 수행하여 차이가 있는지 확인합니다.

를 사용해 주세요.login.html. 및 교환하다RestController와 함께Controller

교체하다@RestController와 함께@Controller.

난 티멜리프를 사용하지 않아 그리고 나한테는 티멜리프가 작동한 유일한 방법은@Controller수업 중에

@RequestMapping(method = RequestMethod.GET, value = "/")
public String index() {
    return "index.html";
}

이게 오래된 건 알지만 누군가에게 도움이 될 수도 있어.RestController에서 이를 수행하려면 실제 HTML 코드인 문자열을 반환합니다. 그러면 브라우저는 무엇을 표시할지 알 수 있습니다.

이름만 반환하므로 이름만 가져옵니다.return "login";.그건…@RestController이 컨트롤러는 뷰가 아닌 데이터를 반환합니다.이 때문에 메서드에서 반환되는 콘텐츠만 얻을 수 있습니다.

이 이름으로 뷰를 표시하는 경우 Spring MVC를 사용해야 합니다.다음 예를 참조해 주십시오.

이미 @kukuz & @Robby에 의해 @RequestMapping 주석으로 응답되었습니다만, @GetMapping 주석으로도 사용할 수 있습니다.

@GetMapping("/index")
public ModelAndView welcome() {
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.setViewName("index.html");
    return modelAndView;
}

Request Mapping 내에서는 다음과 같이 GET 또는 POST 메서드를 지정할 수 있습니다.

@RestController
public class HomeController {

@RequestMapping(value="/", Method="GET")  //or Method="POST"
public String welcome() {
    return "/login";
}
}

이 페이지에서 요청하면 login.html 페이지가 반환됩니다.

String여기로 돌아옵니다.

 return "login";

실제로 브라우저로 돌려보내는 전체 콘텐츠입니다.

파일의 내용을 되돌리는 경우는, 다음의 방법이 있습니다.

  1. 파일 열기
  2. 내용을 문자열로 읽다
  3. 값을 반환하다

Spring boot service to download file(파일 다운로드용 스프링 부트 서비스)이라는 질문에 대해답변을 사용할 수 있습니다.

@Controller
public class HomeController {

    @RequestMapping(method = RequestMethod.GET, value = "/")
    public ModelAndView welcome() {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("login.html");
        return modelAndView;
    }
}

Login.html 파일이 반환됩니다.Login.html은 정적 폴더 안에 있어야 합니다.

참고: 백리프 종속성은 추가되지 않았습니다.

@RestController
public class HomeController {

    @RequestMapping(method = RequestMethod.GET, value = "/")
    public String welcome() {
        return "login";
    }
}

그러면 String 로그인이 반환됩니다.

@RestController로 주석을 단 클래스에서 @GetMapping으로 주석을 단 메서드는 두 가지 방법으로 뷰(JSP, HTML 등)를 반환할 수 있습니다.

@GetMapping("/dummy")
public String renderDummyWebPage() {
    return "dummy.jsp";
}

그러나 이 방법에는 두 가지 제한이 있습니다.

  1. 이 JSP 페이지는 src/main/webapp 디렉토리에 존재해야 합니다.그렇지 않으면 뷰가 서브 디렉토리에 존재하는 경우 반환 유형을 적절하게 변경해야 합니다.예를 들어 JSP 페이지가 src/main/webapp/views 디렉토리에 있는 경우 대신 string으로 views/dummy.jsp를 반환해야 합니다.

  2. 어플리케이션의 ViewResolver가 이미 설정되어 있는 경우 단순 문자열을 반환하는 것은 기능하지 않고 문자열은 JSP 뷰명이 아닌 일반 문자열로 해석됩니다.


대신 ModelAndView를 반환하면 이러한 두 가지 제한을 극복할 수 있습니다.

@GetMapping("/dummy")
public ModelAndView renderDummyWebPage() {
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.setViewName("dummy");
    return modelAndView;
}

이 답변이 도움이 되었으면 합니다, 감사합니다.

는 '우리'를 사용하는 입니다.IoC끝점 방법에 종속성을 넣기 위한 방법(예: 백일엽) Model★★★★★★★★★★★…

 @Controller 
 public class GreetingController {
        @GetMapping("/greeting") 
        public String greeting(
            @RequestParam(name="name", required=false, defaultValue="World") String name, Model model) {
             model.addAttribute("name", name); 
             return "greeting"; 
             // returns the already proccessed model from src/main/resources/templates/greeting.html 
      }
 }

자세한 예는http://https://spring.io/guides/gs/serving-web-content/ 를 참조해 주세요.

@Controller
public class WebController {
@GetMapping("/")

public String homePage() {
    return "index";
  }
}

이 문제는 다음 두 가지 방법으로 해결할 수 있습니다.

첫 번째 방법:REST를 계속 사용하고 싶다면ModelAndViewHTML을 사용합니다.해피 응우옌, 해피 응우옌.

@RequestMapping("/")
public ModelAndView index () {
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.setViewName("index");
    return modelAndView;
}

번째 방법: 중요한 날씨가 아니라면 REST를 계속 사용하든 말든, 따라서 변경만 하면 됩니다.@RestController로로 합니다.@ControllerTymeleaf 템플릿엔진을 이미 추가했는지 확인합니다.

언급URL : https://stackoverflow.com/questions/38700790/how-to-return-a-html-page-from-a-restful-controller-in-spring-boot