Сделайте звонок REST URL в другую службу, заполнив данные из формы
Я недавно начал работать с Spring MVC framework. Я сделал большой прогресс, читая много учебников в сети.
Справочная информация о моем приложении -
Я должен сделать вызов REST URL другому сервису (уже развернутому на tomcat), используя данные, представленные в форме. Таким образом, я уже сделал форму с помощью JSP, содержание которой примерно таково, как показано на рисунке - я не уверен, как я могу сделать вызов REST url, сделав url из записи формы, а затем показать ответ этого url-адреса на следующем экране.
Итак, в приведенном выше виде , если я написал User Id as 1000012848
, и checkbox is selected (means true) for Debug Flag
, и в Attribute Name I have selected first row
( В общем случае мы можем выбрать и все три), и Machine Name is localhost
, и Port Number is 8080
, то url должен выглядеть примерно так -
http://localhost:8080/service/newservice/v1/get/PP.USERID=1000012848,debugflag=true/host.profile.ACCOUNT
Таким образом, во всех наших URL-адресах, которые мы будем создавать из записей формы, строка ниже всегда будет находиться в одном и том же месте - и после этого каждая запись формы начнет добавляться
service/newservice/v1/get/
Теперь после создания указанного выше url, как только я нажму кнопку Отправить, он будет делать вызов на указанный выше url и какой бы ответ он ни получил от URL, он будет показан на следующем экране (результат.файл jsp), который я не уверен, как это сделать? Ниже приведены мои файлы, которые я создал. Может ли кто-нибудь помочь мне в решении моей проблемы? Какие изменения кода мне понадобятся для решения этой проблемы?
Студент.файл jsp (который делает форму)
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<html>
<res:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="layout" content="main" />
<title>First Tutorial</title>
</res:head>
<res:body>
<form:form method="POST" action="/_hostnewapp/addStudent">
<table>
<tr>
<td><form:label path="userId">User Id</form:label></td>
<td><form:input path="userId" /></td>
</tr>
<tr>
<td>Debug Flag :</td>
<td><form:checkbox path="debugFlag" /></td>
</tr>
<tr>
<td>Attribute Name</td>
<td><form:select path="attributeNames" items="${attributeNamesList}"
multiple="true" /></td>
</tr>
<!-- <tr>
<td>Environment</td>
<td><form:checkboxes items="${environmentList}"
path="environments" /></td>
</tr>
-->
<tr>
<td><form:label path="machineName">Machine Name</form:label></td>
<td><form:input path="machineName" /></td>
</tr>
<tr>
<td><form:label path="portNumber">Port Number</form:label></td>
<td><form:input path="portNumber" /></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="Submit" /></td>
</tr>
</table>
</form:form>
</res:body>
</html>
Результат.файл jsp (который я собираюсь использовать для показать результат после нажатия на этот url)
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<html>
<res:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="layout" content="main" />
<title>HostDomain</title>
</res:head>
<res:body>
<h2>Response after submitting the result</h2>
// Not sure what I need to add here to show the result after hitting the url
</res:body>
</html>
Класс Контроллера -
@Controller
public class SampleRaptorController {
@RequestMapping(value = "/student", method = RequestMethod.GET)
public ModelAndView student() {
return new ModelAndView("student", "command", new Student());
}
@RequestMapping(value = "/addStudent", method = RequestMethod.POST)
public String addStudent(@ModelAttribute("SpringWeb") Student student,
ModelMap model) {
model.addAttribute("userId", student.getUserId());
return "result";
}
@ModelAttribute("attributeNamesList")
public Map<String,String> populateSkillList() {
//Data referencing for java skills list box
Map<String,String> attributeNamesList = new LinkedHashMap<String,String>();
attributeNamesList.put("ACCOUNT","host.profile.ACC");
attributeNamesList.put("ADVERTISING","host.profile.ADV");
attributeNamesList.put("SEGMENTATION","host.profile.SEG");
return attributeNamesList;
}
}
1 ответ:
Вы можете использовать
RestTemplate
для вызова RESTful URL из вашего компонента springИтак, ваш метод контроллера может быть следующим
@Controller public class SampleRaptorController { @Autowired RestTemplate restTemplate; @RequestMapping(value = "/addStudent", method = RequestMethod.POST) public String addStudent( @ModelAttribute("SpringWeb") Student student, Model model){ // Build URL StringBuilder url = new StringBuilder(). append("http://localhost:8080/service/newservice/v1/get"). append("?PP.USERID=" + student.getUserId). append("&debugflag=" + student.isDebugFlag);// so on // Call service String result = restTemplate.getForObject(url.toString(), String.class); model.addAttribute("result", result); return "result"; } }
Ваша конфигурация пружины должна зарегистрировать restTemplate, как показано ниже:
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate"/>
Смотрите RestTemplate doc для получения более подробной информации.
Вышесказанное должно быть сделано.
Одно предложение.. Ваш спокойный URL (
http://localhost:8080/service/newservice/v1/get/PP.USERID=1000012848, debugflag=true/host.profile.ACCOUNT
) действительно ужасен. Как только вы решите свою проблему, я рекомендую вам поискать в google, как выглядит хороший RESTful URL shuld.Ура!, Vinay