gpt4 book ai didi

java - 通过填写表单中的详细信息对其他服务进行 REST URL 调用

转载 作者:行者123 更新时间:2023-11-30 06:26:20 26 4
gpt4 key购买 nike

我最近开始使用 Spring MVC 框架。在网上阅读了很多教程后,我取得了很大的进步。

我的申请背景-

我必须使用表单中提供的详细信息对另一个服务(已部署在 tomcat 上)进行 REST URL 调用。所以我已经使用 JSP 制作了一个表单,其内容如图所示 - 我不确定如何通过从表单条目创建 url 进行 REST url 调用,然后显示该 url 的响应下一个屏幕。

所以在上面的表格中,如果我将 User Id 写为 1000012848 ,并且为 Debug Flag 和 Attribute Name 选择了 checkbox(意味着 true)我选择了第一行(通常我们也可以选择所有三行)并且Machine Name is localhostPort 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 类-

@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 方法可以如下所示

@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 doc了解更多详情。

上面应该做的。

一个建议.. 你的 RESTful URL (http://localhost:8080/service/newservice/v1/get/PP.USERID=1000012848, debugflag=true/host.profile.ACCOUNT)真的很可怕。一旦你解决了你的问题,我建议你用谷歌搜索一个好的 RESTful URL 应该是什么样子。

干杯,维奈

关于java - 通过填写表单中的详细信息对其他服务进行 REST URL 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14432167/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com