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.
Собственно, даже когда я пишу это, я понимаю, что это не то, что вы имели в виду, я не думаю.
спасибо. Был бы очень благодарен, если бы вы могли объяснить или указать мне куда-нибудь, что поможет в этом битке. Я новичок во всем этом, и пока я ищу, я не уверен, что использую правильные условия. Кроме того, я читал о тестировании с использованием MockMvc, который, похоже, делает что-то похожее на то, что я ищу. Я предполагаю, что было бы неплохо использовать метод тестирования? Просто мысль. – beigerac
Также может быть актуальным, что REST api возвращает json-пакетный ответ. – beigerac
@beigerac Spring MVC '@ ReturnController возвращает POJO, и вы можете вводить контроллеры и вызывать методы на них, как и любой другой Spring. – chrylis