여러 컨트롤러를 사용하는 Spring Boot API?
저는 봄부츠를 배우기 시작했습니다.여러 RestController를 사용하는 예제를 찾는 데 어려움을 겪고 있는데, 이는 제가 뭔가 잘못하고 있다는 것을 의미합니다.저는 매우 간단한 예를 시도하고 있습니다.목표는 다음과 같은 전화를 거는 것입니다.
localhost:8080/
localhost:8080/employees/bob
localhost:8080/departments
localhost:8080/만 표시할 수 있습니다.다른 호출은 응답을 반환합니다.이 응용 프로그램에는 /error에 대한 명시적인 매핑이 없으므로 이를 폴백으로 보는 것입니다.
com.demo.departments
Department.java
DepartmentController.java
com.demo.employees
Employee.java
EmployeeController.java
com.demo
BootDemoApplication.java
코드:
package com.demo.departments
@RestController
@RequestMapping("/departments")
public class DepartmentController {
@RequestMapping("")
public String get(){
return "test..";
}
@RequestMapping("/list")
public List<Department> getDepartments(){
return null;
}
}
--------------------------------------------------------------------
package com.demo.employees
@RestController
@RequestMapping("/employees")
public class EmployeeController {
Employee e =new Employee();
@RequestMapping(value = "/{name}", method = RequestMethod.GET, produces = "application/json")
public Employee getEmployeeInJSON(@PathVariable String name) {
e.setName(name);
e.setEmail("employee1@genuitec.com");
return e;
}
}
-----------------------------------------------------------------------
package com.demo
@RestController
@SpringBootApplication
public class BootDemoApplication {
public static void main(String[] args) {
SpringApplication.run(BootDemoApplication.class, args);
}
@RequestMapping("/")
String home(){
return "<html> This is the home page for Boot Demo.</html>";
}
저는 Spring Boot을 시도하고 있는데 같은 문제가 발생하여 수정한 지 얼마 되지 않아 누군가에게 도움이 될 수도 있다고 생각하여 솔루션을 여기에 올립니다.
먼저 컨트롤러 패키지의 루트에 응용 프로그램 클래스(기본 메서드 포함)를 배치합니다.
com.example.demo | +-> controller | | | +--> IndexController.java | +--> LoginController.java | +-> Application.java
어플.자바
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Spring은 데모 패키지의 하위 패키지의 모든 구성 요소를 스캔합니다.
IndexController.java(반환 인덱스.html 보기)
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping(value = {""})
public class IndexController {
@GetMapping(value = {""})
public ModelAndView index() {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("index");
return modelAndView;
}
}
LoginController.java(로그인.html 보기 반환)
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping(value = {"/login"})
public class LoginController {
@GetMapping(value = {""})
public ModelAndView login() {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("login");
return modelAndView;
}
}
이제 인덱스 보기: http://localhost:8080/demo/ 및 로그인 보기: http://localhost:8080/demo/login을 입력할 수 있습니다.
메인 클래스에서 @springbootApplication 표기법으로 서로 다른 패키지의 컨트롤러를 볼 수 없습니다.솔루션은 https://kamwo.me/java-spring-boot-mvc-ontroller-not-called/ 에서 설명합니다.
Spring-boot 1.3.x 이상의 경우 기본 패키지를 SpringBootApplication에 전달하면 다음과 같이 작동합니다.
@SpringBootApplication(scanBasePackages = {"com.demo"})
public class DemoBootApplication {
// code
}
이것은 spring-boot 1.4.0을 사용하는 유사한 애플리케이션에서 작동했습니다.이전 버전의 Spring-Boot의 경우 SpringBootApplication을 사용하지 않고 대신 다음을 사용하여 위와 같은 효과를 얻을 수 있습니다.
@Configuration
@EnableAutoConfiguration
@ComponentScan(basePackages = {"com.demo"})
public class DemoBootApplication {
// code
}
저는 이 블로그 게시물의 댓글에서 이것을 발견했습니다.
@SpringBootApplication 클래스가 @RestControllers를 포함하는 다른 모든 패키지보다 높은 수준의 패키지에 있거나 동일한 패키지에 있는지 확인합니다.
대부분의 경우 ComponentScan 주석이 작동합니다.
아래 예를 참조하십시오. 유사하게 적용할 수 있습니다.
패키지 com.dll;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@ComponentScan(basePackages = {"com.demo"})
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
사용해 보세요.
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Main {
public static void main(String[] args) {
Object[] sources = new Object[2];
sources[0] = Controller1.class;
sources[1] = Controller2.class;
SpringApplication.run(sources, args);
}
}
이것이 올바른 방법인지는 모르겠지만, 제가 두 번째 컨트롤러 주석을 @Controller에서 @RestController로 변경했을 때 작동하기 시작했습니다.
아래에서 시도:-
@ComponentScan
@Configuration
@EnableAutoConfiguration
public class BootDemoApplication {
public static void main(String[] args) {
SpringApplication.run(BootDemoApplication.class);
}
}
@RestController
@RequestMapping(value = "test", produces = MediaType.APPLICATION_JSON_VALUE)
public class TestController {
@RequestMapping(method = RequestMethod.GET)
public String test() {
return "from test method";
}
}
언급URL : https://stackoverflow.com/questions/37370948/spring-boot-api-with-multiple-controllers
'programing' 카테고리의 다른 글
| MS SQL Server의 형식 번호(백분율) (0) | 2023.06.25 |
|---|---|
| 팬더 시리즈를 데이터 프레임으로 변환 (0) | 2023.06.25 |
| 깃허브에 있는 요지에 대해 풀 요청을 할 수 있습니까? (0) | 2023.06.25 |
| gitstash pop이 stash 항목에서 추적되지 않은 파일을 복원할 수 없다고 하는 이유는 무엇입니까? (0) | 2023.06.25 |
| git 하위 모듈 추적 최신 (0) | 2023.06.25 |