java - 在 Spring Controller 中进行数据绑定(bind)期间,如何将请求中的两个字符串参数绑定(bind)到一种字段类型?

标签 java spring spring-mvc data-binding controller

Let 是我的自定义类型(请注意,没有 setter ,因为这是一个不可变值对象):

class CustomType extends ValueObject {

  private String value;

  @NotNull
  public String getValue();

  CustomType(String value) { this.value = value;}
  CustomType(String prefix, String suffix) { this.value = prefix + suffix;}

  public String getPrefix() { return value.substring(0, 4);}
  public String getSuffix() { return value.substring(4);}
}

和我的 Controller :

@Controller
class MyController {
  public ModelAndView processSubmittedForm(@Valid CustomType myObject, BindingResult result) {..}
}

和我的jsp View 表单:

<form>
    <input id="prefixField" name="prefix" value="756." type="hidden">
    <input id="suffixField" name="suffix" type="text">
...
<form/>

考虑到此 View 将发送两个 POST 参数 prefixsuffix,我需要做什么才能将这两个参数与单个对象 myObject 绑定(bind),假设 Spring 将使用非空值对其进行验证?

我可以通过自定义 WebDataBinder、InitBinder、注册格式化程序或自定义编辑器或其他方式来实现此目的吗?

非常感谢您的帮助。

编辑: 以下是我在谷歌上搜索的相关文章,但没有找到与我自己的问题相匹配的解决方案:

最佳答案

@fabien7474,你可以使用PropertiesEditor,因为如果我们稍微了解一下HTTP协议(protocol),请求中的所有参数都是String,当你需要执行一些类型转换或验证时,spring给你一个初始化binder的方法。

示例:

@Controller
class MyController {
    public ModelAndView processSubmittedForm(@Valid MyObject myObject, BindingResult result) {..}

    @InitBinder
    public void initBinder (WebDataBinder binder) {
         binder.registerCustomEditor(MyObject.class, new CustomObjectEditor());
    }

}


class CustomObjectEditor {
    @Override
    public void setAsText(String text) throws IllegalArgumentException {
            MyObject ob = new MyObject();
            CustomType ct = new CustomType();
            ct.setValue(text);
            ob.setCustomType(ct);

            super.setValue(ob);

    }
}

通过这个示例,您可以看到一种对话类型。希望这对您有帮助。

关于java - 在 Spring Controller 中进行数据绑定(bind)期间,如何将请求中的两个字符串参数绑定(bind)到一种字段类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15787607/

相关文章:

java - 嵌入式 Jetty Web 服务器不工作,未调用处理程序

java - Spring 中的 queryparm 支持用于 Restful Web 服务

hibernate - 对于使用 Spring 和 JDBCTemplates、iBatis/myBatis 或 Hibernate 的新项目?

java.lang.IllegalArgumentException : can't parse argument number: Phone 异常

java - 我可以配置我的 servlet 容器的线程管理吗?

java - Spring 和 Velocity - 表单处理

java - 静态数组不一样 [java]

java - APACHE POI 创建损坏的文件 - 无论我做了什么更改

java - 隐藏 p :schedule with css 中的事件

spring - 在Docker镜像中更新jar