2016-05-22 2 views
6

Я начинаю изучать Весенний ботинок. Я изо всех сил пытаюсь найти пример с несколькими RestControllers, который указывает мне, что я могу делать что-то неправильно. Я пытаюсь очень простой пример: Цель состоит в том, чтобы совершать звонки, как следующее:Весенний загрузочный API с несколькими контроллерами?

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("[email protected]"); 

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>"; 
} 
+0

Не думаю, что вам нужны предыдущие «/» на отображениях верхнего уровня контроллера. – ChiefTwoPencils

+0

Я попробовал, это не имело значения. – user1529412

+0

Это должно работать (проверено). Вы не предоставили никакого контроллера для http: // localhost: 8080/', хотя, возможно, ошибка там. – g00glen00b

ответ

0

Попробуйте ниже: -

@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"; 
} 

} 
0

Для весенне-загрузочного 1.3.x и выше, проходя базовый пакет SpringBootApplication должен работать:

@SpringBootApplication(scanBasePackages = {"com.demo"}) 
public class DemoBootApplication { 
    // code 
} 

Это работало для меня на аналогичную заявку с использованием пружинных загрузок 1.4.0. Для более ранних версий весна-загрузки, в этом случае вы будете иметь отказаться от использования SpringBootApplication и вместо этого использовать следующее, чтобы получить тот же эффект, что и выше:

@Configuration 
@EnableAutoConfiguration 
@ComponentScan(basePackages = {"com.demo"}) 
public class DemoBootApplication { 
    // code 
} 

Я нашел это в комментариях по этому blog post.

0

Попробуйте

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); 
    } 

} 
+1

У вас есть объяснение для этого кода? –

0

ComponentScan аннотаций работает в большинстве случаев.

См. Ниже пример, вы можете применить аналогичные.
упаковка com.demo;

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); 
} 
} 
5

Пытаюсь Spring бутсу и получил такую ​​же проблему, а просто установил его, я отправляю мое решение здесь, потому что я думаю, что это может быть полезным для кого-то.

Во-первых, поставить класс приложения (которые содержат основной метод) в корне пакета контроллеров'S:

com.example.demo 
       | 
       +-> controller 
       |  | 
       |  +--> IndexController.java 
       |  +--> LoginController.java 
       | 
       +-> Application.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 (возврат index.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

1

Убедитесь, что класс @SpringBootApplication находится в пакете, который является уровень выше всех других пакетов которые содержат @RestControllers или в том же пакете.

Смежные вопросы