通过填写表单中的详细信息来进行对其他服务的REST URL调用
问题内容:
我最近开始使用Spring MVC框架。在网上阅读大量教程的同时,我取得了很大的进步。
关于我的申请的背景-
我必须使用表单中提供的详细信息对另一个服务(已在tomcat上部署)进行REST
URL调用。因此,我已经使用JSP制作了一个表单,其内容如下图所示:我不确定如何通过表单条目中的URL来进行REST
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得到什么响应,它将显示在下一个屏幕(result.jsp文件)中,不知道该怎么做?以下是我创建的文件。谁能帮我解决我的问题?为了解决这个问题,我需要进行哪些代码更改?
student.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>
result.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;
}
}
问题答案:
您可以用来RestTemplate
从spring组件中调用RESTful URL
因此,您的控制器方法可以如下
@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";
}
}
您的spring配置应该注册restTemplate,如下所示:
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate"/>
有关更多详细信息,请参见RestTemplate文档。
以上应该做。
一个建议..您的RESTful
URL(http://localhost:8080/service/newservice/v1/get/PP.USERID=1000012848, debugflag=true/host.profile.ACCOUNT
)确实很糟糕。解决问题后,建议您去google一下一个好的RESTful URL。
Vinay干杯