2014-10-20 3 views
0

EDIT -Вызов API REST от контроллера MVC (Весенний MVC)

Это глупый вопрос - пожалуйста, игнорируйте его. Отправляйтесь, чтобы правильно изучить Java.

-

Я хочу создать API, который может быть использован внешне, но я также хочу, чтобы создать свой собственный передний конец того же API.

Если я создаю контроллер MVC & контроллер REST в том же приложении, могу ли я вызвать REST API из контроллера MVC, не создавая «внешний» http-вызов, который кажется немного расточительным?

(EDIT - первоначально связанный с другим вопросом, но это неправильно. Не удается найти правильный, удаленный).

Очевидно, поднимает вопрос о том, должен ли я или нет, но это, я полагаю, субъективно. В стороне я бы приветствовал мнение по этому поводу.

EDIT 2 (добавить некоторый код в ответ на chrylis)

Итак, если я создаю класс, как это (пример, скопированный из учебника где-нибудь)

public class Greeting { 
    private final long id; 
    private final String content; 

    public Greeting(long id, String content) { 
     this.id = id; 
     this.content = content; 
    } 

    public long getId() { 
     return id; 
    } 

    public String getContent() { 
     return content; 
    } 
} 

и контроллер остальное подобное, которые если вызывается непосредственно из браузера будет возвращать JSON данные:

@RestController 
public class GreetingController { 

    private static final String template = "Hello, %s!"; 
    private final AtomicLong counter = new AtomicLong(); 

    @RequestMapping("/greeting") 
    public Greeting greeting(@RequestParam(value="name", required=false, defaultValue="World") String name) { 
     return new Greeting(counter.incrementAndGet(), 
          String.format(template, name)); 
    } 

} 

Тогда я назвал его от моего HTML контроллера, как это:

@Controller 
public class HomeController { 

    private static final Logger logger = LoggerFactory.getLogger(HomeController.class); 

    @RequestMapping("/") 
    public String home(Model model) { 

     Greeting gr=new Greeting(1,"Hi"); 
     logger.info(gr.getContent()); 

     model.addAttribute("modelName",gr.getContent()); 
     return "home"; 
    } 
} 

это то, что вы имеете в виду? Кажется, это работает. Единственная проблема, которую я вижу, - это то, что я непосредственно работаю над классом и не выполняю действия остальных api.

Собственно, даже когда я пишу это, я понимаю, что это не то, что вы имели в виду, я не думаю.

ответ

0

Это на самом деле то, как я обрабатываю свои собственные веб-приложения. Для ресурса Person создайте PersonRestController, который возвращает представление PersonResource REST, и введите PersonRestController в PersonHtmlController. Методы обработчика на контроллере HTML вызывают контроллер REST и подают PersonResource (и другие соответствующие атрибуты) модели для HTML-шаблона.

+0

спасибо. Был бы очень благодарен, если бы вы могли объяснить или указать мне куда-нибудь, что поможет в этом битке. Я новичок во всем этом, и пока я ищу, я не уверен, что использую правильные условия. Кроме того, я читал о тестировании с использованием MockMvc, который, похоже, делает что-то похожее на то, что я ищу. Я предполагаю, что было бы неплохо использовать метод тестирования? Просто мысль. – beigerac

+0

Также может быть актуальным, что REST api возвращает json-пакетный ответ. – beigerac

+0

@beigerac Spring MVC '@ ReturnController возвращает POJO, и вы можете вводить контроллеры и вызывать методы на них, как и любой другой Spring. – chrylis

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