春天的路径变量不起作用,无法获得价值

时间:2015-04-09 15:53:04

标签: spring path-variables

当我输入时:http://localhost:8080/sys_manager/admin/sys/resource/update/1009 它可以进入此方法,但id值为null,:

    @RequestMapping(value = "update/{id}", method = RequestMethod.GET)
    public String showUpdateForm(@PathVariable("id") ID id, Model model) {
        M m = baseService.findOne(id);
        if (permissionList != null) {
            this.permissionList.assertHasUpdatePermission();
        }
        setCommonData(model);
        model.addAttribute(Constants.OP_NAME, "修改");
        model.addAttribute("m", m);
        return viewName("editForm");
    }

一张图片超过数千字,这里是快照:https://plus.google.com/photos/109577783306525329699/albums/6135767537581420673

3 个答案:

答案 0 :(得分:2)

谢谢大家,我已经解决了这个问题,因为它被覆盖了。 超级方法

@RequestMapping(value = "update/{id}", method = RequestMethod.GET)
public String showUpdateForm(@PathVariable("id") ID id, Model model) {
    M m = baseService.findOne(id);
    if (permissionList != null) {
        this.permissionList.assertHasUpdatePermission();
    }
    setCommonData(model);
    model.addAttribute(Constants.OP_NAME, "修改");
    model.addAttribute("m", m);
    return viewName("editForm");
}

这个子类的方法如下:

@Override
public String showUpdateForm(@PathVariable("id") Long id, Model model) {
    return super.showUpdateForm(id, model);
}

它会访问孩子" showUpdateForm"(即使孩子'方法没有@RequestMapping)。我的错误是我没有添加@PathVariable在孩子的方法中。

答案 1 :(得分:0)

最简单的解决方案是像这样改变你的控制器动作

public String showUpdateForm(@PathVariable("id") Integer id, Model model) {
....

如果您真的想使用自定义类对象作为PathVariable。然后你必须在你的控制器上注册一个自定义编辑器,如下所示。

@InitBinder
public void initBinder(WebDataBinder binder) {
    binder.registerCustomEditor(ID.class, new PropertyEditorSupport() {
        @Override
        public String getAsText() {
            return ((ID) this.getValue()).toString();
        }

        @Override
        public void setAsText(String text) throws IllegalArgumentException {
            setValue(new ID(text));
        }
    });
}

另请注意,您必须添加avariable以存储在该类内或在此initBinder内解析的文本值,如您所愿。

答案 2 :(得分:0)

我会使用Spring Data JPA DomainClassConverter,这样就可以保存findOne查找,例如

@RequestMapping(value = "update/{id}", method = RequestMethod.GET)
public String showUpdateForm(@PathVariable("id") M m, Model model) {

http://docs.spring.io/spring-data/jpa/docs/1.8.0.RELEASE/reference/html/#_domainclassconverter