2

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

关于我的应用程序的背景-

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

所以在上面的表格中,如果我写了User Id as 1000012848checkbox is selected (means true) for Debug Flag并且在Attribute Name I have selected first row(通常我们也可以选择所有三个),Machine Name is localhost然后Port Number is 8080url 应该看起来像这样 -

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;
    }
}
4

1 回答 1

5

您可以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) 真的很糟糕。一旦你解决了你的问题,我建议你去谷歌看看一个好的 RESTful URL 应该是什么样子。

干杯,维奈

于 2013-01-21T09:20:57.320 回答