当前位置: 首页 > 知识库问答 >
问题:

在spring控制器中进行数据绑定期间,如何将请求中的两个字符串参数绑定到一个字段类型中?

周志文
2023-03-14

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

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
class MyController {
  public ModelAndView processSubmittedForm(@Valid CustomType myObject, BindingResult result) {..}
}

和我的jsp视图表单:

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

考虑到此视图将发送两个POST参数前缀后缀,我需要做什么才能让这两个参数与单个对象绑定myObject,假设它将被Spring验证为非空值?

我可以通过自定义WebDataBinder、InitBinder、注册格式化程序或自定义编辑器等来实现这一点吗?

非常感谢你的帮助。

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

  • http://forum.springsource.org/showthread.php?130618-使用messageConverters的自定义HandlerMethodArgumentResolver
  • Spring MVC自定义方法参数绑定
  • Spring部分更新对象数据绑定
  • http://sergialmar.wordpress.com/2011/03/29/extending-handler-method-argument-resolution-in-spring-mvc/
  • 自定义WebArgumentResolver,如@PathVariable

共有2个答案

汪同
2023-03-14
<form>
<input id="prefixField" name="prefix" value="756." type="hidden">
<input id="suffixField" name="prefix" type="text">

。。。

Declare prefix field in your object(i.e commandName).
陆和泰
2023-03-14

@fabien7474,您可以使用PropertiesEditor,因为如果我们稍微看看HTTP协议,请求中的所有参数都是字符串,当您需要执行某种类型转换或验证时,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);

    }
}

通过这个例子,你可以看到一种对话。希望这对你有所帮助。

 类似资料:
  • 我想将spring date字段绑定到pojo类并返回日期 DateOfBornd的类型为java.sql.Date。现在,当我将日期从spring形式传递给函数setDateOfBorning时,它取空值 例如,在register.jsp(注册表单)中,我有specific字段 java(Pojo类) 当我调用getDateOfBorne()时 返回: 预期的 我得到的信息: 请帮助我如何转换这

  • 问题内容: 无论如何,我可以将两个模型值绑定到一个输入字段吗? 假设我有一个输入字段,我想将其作为范围内两个变量的值,例如: 问题答案: 您不能,但是有一些解决方法。 1.使用ngChange更新其他模型 2.您可以观看模型,并在更改时更新另一个模型 如果您想使它们保持同步,则还需要注意其中的变化。 这里的例子

  • 问题内容: 在Spring MVC中,将请求 参数 绑定到处理请求的方法参数很容易。我只是用。但是我可以对request 属性 做同样的事情吗?当前,当我想访问request 属性时 ,我必须执行以下操作: 但是我真的很想使用这样的东西: 不幸的是,这种方式行不通。我可以以某种方式扩展Spring功能并添加自己的“绑定器”吗? 编辑 (我要实现的目标) :我将当前登录的用户存储在request属性

  • 问题内容: 我有一个将字符串绑定到如下所示的ODBC语句的代码 它适用于任何常规字符串,但不适用于空字符串。我收到一条错误消息: 错误:[Microsoft] [ODBC SQL Server驱动程序]无效的精度值 我将函数调用更改为此 现在可以插入空字符串,但是它将转换为空格而不是空字符串。 我不想插入NULL值,因为遇到NULL时,许多SQL语句变得违反直觉。有没有办法绑定空字符串? (数据库

  • 我的jsp表单中有一些数字字段(但不是强制的),例如kkqty、sogoqty和sesaqty。因此,当用户没有在这些字段中输入任何内容时,我在控制器端接收到null,因此在保存这些表单数据时会出现Null属性异常 我的POJO(OutletInfo.java) 我的控制器 在控制器中,当我尝试打印所有数值字段时,我在这里收到空值,因此无法保存。 我需要将null转换为默认值0.0,我知道我需要检

  • 我有一个如下的有效载荷。 我的请求Body POJO如下所示。 但是,未正确绑定并引发异常。请提出前进的方向。 异常堆栈: 组织。springframework。http。转换器。HttpMessageEndableException:JSON解析错误:无效数值:不允许前导零;嵌套的异常是com。fasterxml。杰克逊。果心JsonParseException:无效数值:在[Source:(P