gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:42:52 24 4
gpt4 key购买 nike

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com