스프링 부트 시 안정 컨트롤러에서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";
}
}
「」를 사용합니다.@ResponseBody
return "login";
스트링 스트링됩니다.payload
JSON의 HTTP입니다.
login
반응으로요.
다음의 순서에 따릅니다.
html 파일을 리소스/템플릿/에 저장해야 합니다.
「 「 」를 교환해 .
@RestController
@Controller
뷰 리졸버를 사용하고 있는 경우는, 삭제합니다.
는 확장자를 하지 않고 파일 (예: 파일 이름).
return "index"
다음 종속성을 포함합니다.
<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";
실제로 브라우저로 돌려보내는 전체 콘텐츠입니다.
파일의 내용을 되돌리는 경우는, 다음의 방법이 있습니다.
- 파일 열기
- 내용을 문자열로 읽다
- 값을 반환하다
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";
}
그러나 이 방법에는 두 가지 제한이 있습니다.
이 JSP 페이지는 src/main/webapp 디렉토리에 존재해야 합니다.그렇지 않으면 뷰가 서브 디렉토리에 존재하는 경우 반환 유형을 적절하게 변경해야 합니다.예를 들어 JSP 페이지가 src/main/webapp/views 디렉토리에 있는 경우 대신 string으로 views/dummy.jsp를 반환해야 합니다.
어플리케이션의 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를 계속 사용하고 싶다면ModelAndView
HTML을 사용합니다.해피 응우옌, 해피 응우옌.
@RequestMapping("/")
public ModelAndView index () {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("index");
return modelAndView;
}
두 번째 방법: 중요한 날씨가 아니라면 REST를 계속 사용하든 말든, 따라서 변경만 하면 됩니다.@RestController
로로 합니다.@Controller
Tymeleaf 템플릿엔진을 이미 추가했는지 확인합니다.
언급URL : https://stackoverflow.com/questions/38700790/how-to-return-a-html-page-from-a-restful-controller-in-spring-boot
'programing' 카테고리의 다른 글
파일 이름이 jsx인 경우 웹 팩에서 모듈을 찾을 수 없습니다. (0) | 2023.03.16 |
---|---|
각도 조절 e2e 테스트 - 계속하기 전에 주요 이벤트가 완료될 때까지 기다립니다. (0) | 2023.03.16 |
WordPress 4.7.2로 업데이트할 수 없음 - 오류: 일관성 없는 파일 권한 (0) | 2023.03.16 |
Google 분석 코드의 PHP 코드가 제대로 실행되지 않는 이유는 무엇입니까? (0) | 2023.03.16 |
JSON을 사용한 C#에서 JSON으로의 시리얼화.그물 (0) | 2023.03.16 |