具有多个控制器的弹簧启动 API?

我开始学习Spring Boot。我正在努力寻找一个具有多个RestControllers的示例,这向我表明我可能做错了什么。我正在尝试一个非常简单的示例:目标是进行如下调用:

localhost:8080/
localhost:8080/employees/bob
localhost:8080/departments

我只能让本地主机: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>";
}

答案 1

我正在尝试Spring Boot并遇到同样的问题,并刚刚修复了它,我在这里发布了我的解决方案,因为我认为它可能对某人有所帮助。

首先,将应用程序类(包含 main 方法)放在控制器包的根目录下:

com.example.demo
              |
              +-> controller
              |      |
              |      +--> IndexController.java
              |      +--> LoginController.java
              |
              +-> Application.java

应用.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将扫描演示包子包的所有组件

索引控制器.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;
    }

}

登录控制器.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


答案 2

显然,不同包中的控制器在主类中看不到@springbootApplication表示法。此处解释的解决方案 https://kamwo.me/java-spring-boot-mvc-ontroller-not-called/


推荐