将PathVariable传递给AJAX控制器



我希望能够在鼠标单击时将文本框中输入的值传递给AJAX控制器。

控制器代码:

@EnableWebMvc
@Controller
public class HelloWorldController {
    public static class User {
        private String name, surname;
        int age;
        public User(String name, String surname, int age) {
            this.name = name;
            this.surname = surname;
            this.age = age;
        }
        public int getAge() {
            return age;
        }
        public String getName() {
            return name;
        }
        public String getSurname() {
            return surname;
        }
    }
    @RequestMapping("/hello")
    public ModelAndView helloWorld() {
        return new ModelAndView("home/hello.jsp", "message", "Spring MVC Demo");
    }
    @RequestMapping(value = "/hello/{name}", produces = "application/json")
    public @ResponseBody User getUser(@PathVariable(value = "name") String name) {
        return new User(name, "Surname", 25);
    }
}

相关视图代码:

        $.getJSON("hello/", {name: $('#username').val()} , function(obj) {
                            $("ul").append("<li>"+obj.name+"</li>");
                        });
// ...
    <input type="text" name="username" id="username" >

所以这不起作用,当按钮被点击时,什么也没发生。但是,当我将控制器更改为@RequestParam时,它可以工作,但我希望它与@PathVariable一起工作,以便显示正确的username的URL。

问题在哪里,我该如何解决?

听起来像这样,因为您正在使用GET方法传递HTTP请求,参数(名称)是通过查询字符串传递的。

这就是为什么@RequestParam起作用而@PathVariable不起作用。

如果你必须使用GET方法,那么试着这样构建你的URL:

/hello/" + $('#username').val() + "/"

和不要传递数据与您的ajax请求

尝试使用firebug或google开发工具,以便查看哪些数据将发送到服务器并返回到浏览器。

像这样:

$.getJSON(/hello/" + $('#username').val() + "/", 
    function(obj) {
         $("ul").append("<li>"+obj.name+"</li>");
});

最新更新