【问题标题】:How to use simple html form to get value from rest service?如何使用简单的 html 表单从休息服务中获取价值?
【发布时间】:2013-11-09 04:55:01
【问题描述】:

我有这样的简单控制器:

@Controller
@RequestMapping("/raport")
public class SiteController {

    @RequestMapping(value = "/{url}", method = RequestMethod.GET)
    public String getMovie(@PathVariable String url, ModelMap model) {

        model.addAttribute("url", url);
        return "raport";

    }

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String getDefaultMovie(ModelMap model) {

        model.addAttribute("url", "this is default movie url");
        return "raport";

    }

} 

如果我打电话给http://localhost:8090/movieraport/raport/testMovie,我会得到服务器的正确响应

电影网址:testMovie

但我想在页面上有一个像这样的小表单(.jsp):

<body>
<form action="raport/" method="get">
    <input name="url" />
    <input type="submit" value="Update Record">
</form>

<h3>Movie url : ${url}</h3>

当我点击提交时,我得到了这样的网址

http://localhost:8090/movieraport/raport/raport?url=testMovie

并且服务器无法使用 {testMovie} :(

我明白了:

电影网址:报告

你能帮帮我吗?

【问题讨论】:

  • 这不是问题。 movieraport/raport/testMovie 作品。 movieraport/raport/?url=testMovie 不工作
  • 您还应该查看浏览器如何处理formaction 属性可以采用的特定值。

标签: java html spring rest spring-mvc


【解决方案1】:

如果你想传递“url”作为参数,你需要这样做:

@RequestMapping(value = "/", method = RequestMethod.GET)
public String getMovie(@RequestParam String url, ...) {
    ...
}

您错误地假设“url=”应该传递给您的“/{url}”映射,我想。只需使用 @RequestParam 而不是 @PathVariable 或创建另一种方法来支持两者(如果您需要的话)。

编辑

在您的 cmets 之后,我应该强调我无法知道您的用例是什么或您可能需要的所有端点,但是从您给出的例外情况来看,听起来您只是替换了您的 @987654324 @ 与我的getMovie(),现在签名与您的getDefaultMovie() 冲突。您可以按如下方式轻松更改签名:

@RequestMapping(value = "/", params = "url", method = RequestMethod.GET)
public String getMovie(@RequestParam String url, ...) {
    ...
}

@RequestMapping(value = "/", method = RequestMethod.GET)
public String getDefaultMovie(...) {
    ...
}

如您所见,我已将params = "url" 添加到getMovie() 签名中。这将确保getMovie() 用于处理任何包含url 参数的请求。其余的将转到getDefaultMovie()

【讨论】:

  • 我更改了但它不起作用,应用程序无法设置并出现错误:原因:java.lang.IllegalStateException:发现不明确的映射。无法将“siteController”bean 方法 public java.lang.String com.my.siteraport.controller.SiteController.getMovie(java.lang.String,org.springframework.ui.ModelMap) 映射到 {[/raport/],methods=[ GET],params=[],headers=[],consumes=[],produces=[],custom=[]}: 已经有 'siteController' bean meth public java.lang.String com.my.siteraport.controller .SiteController.getDefaultMovie(org.springframework.ui.ModelMap) 映射。
  • 顺便说一句。我怎样才能以最好的方式做到这一点?
  • 非常感谢功夫爱好者!
猜你喜欢
  • 1970-01-01
  • 2021-06-20
  • 1970-01-01
  • 2019-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-01
  • 1970-01-01
相关资源
最近更新 更多