Jai*_*ime 4 java spring spring-mvc spring-boot
事实Spring MVC证明,我可以通过多种不同的方式绑定我的表单,但我真的感觉自己迷路了。a 的和方法与具有不同名称(parse和)的 a 的方法等效。同样,我可以实现一个或两个s 来完成完全相同的事情。printFormatterPropertyEditorSupportgetAsTextsetAsTextGenericConverter Converter<S,T>
我在此处Formatters阅读了一条替代 的评论PropertyEditor,但我没有找到任何支持它的文档,而且它甚至还没有被弃用。
我的问题是,当涉及到将数据从表单绑定到对象时,正确的方法是什么spring-mvc?PropertyEditorSpring 中,Formatter和之间的主要区别是什么Converter?每一种的用例是什么?对我来说,他们似乎负有同样的责任。
为了帮助理解这些概念,我首先将 Spring 特定功能与 Java 公开的功能区分开来。
\nPropertyEditors 和相关内容由JavaBeans 规范定义。
该规范定义了用于处理对象、对象属性以及与其更改相关的所有内容(作为事件)的 API、机制和约定。
\nPropertyEditor通常在 GUI 中使用来处理 UI 和底层对象模型之间的交互,通常处理属性值与其String表示形式之间的转换。
Spring本身实际上在许多不同的情况下使用不同的PropertyEditor实现和Java Beans约定。例如,来自文档:
\n\nSpring 中使用属性编辑的几个示例:
\n\n
\n- \n
设置 bean 的属性是通过使用
\nPropertyEditor\n实现来完成的。当您使用 String 作为在 XML 文件中声明的某个 bean 的属性值时,Spring(如果相应属性的 setter 有一个Class参数)会ClassEditor尝试将该参数解析为Class对象。- \n
在 Spring\xe2\x80\x99s MVC 框架中解析 HTTP 请求参数是通过\n使用
\nPropertyEditor可以手动绑定到CommandController.
总之,PropertyEditors 允许您使用更多的用例。
现在,在 Spring 世界中,您还需要区分 Spring MVC 和 Spring Core。
\n请注意,Convert和Formatter都被定义为核心技术,与任何用例相关,而不仅限于 Web 框架。
\nSpring 文档在描述Spring Field FormattingPropertyEditor时,对每个 API/SPI 的用途以及它们与s 的关系提供了很好的解释:
\n\n正如上一节中所讨论的,
\ncore.convert它是一个通用类型转换系统。它提供了统一的ConversionServiceAPI 以及强类型转换器 SPI,用于实现从一种类型到另一种类型的转换逻辑。Spring 容器使用此系统来绑定 bean\n属性值。此外,Spring 表达式语言 (SpEL)\n都DataBinder使用此系统来绑定字段值。例如,当 SpEL 需要将 a 强制Short为 aLong来完成expression.setValue(Object bean, Object value)尝试时,core.convert\n系统会执行强制转换。现在考虑典型客户端环境(例如 Web 或桌面应用程序)的类型转换要求。在此类环境中,\n您通常会转换为
\nString支持客户端回发过程,\n然后转换为String支持视图呈现过程。此外,您经常需要本地化String值。更通用的\ncore.convert 转换器 SPI 不直接解决此类格式要求。\n 为了直接解决这些问题,Spring 3 引入了方便的格式化程序 SPI,它为PropertyEditor客户端环境的实现提供了简单而强大的替代方案。一般来说,当您需要实现\n通用类型转换逻辑\xe2\x80\x89\xe2\x80\x94\xe2\x80\x89时,可以使用Converter SPI,例如在\na
\njava.util.Date和Long. 当您在客户端环境(例如 Web 应用程序)中工作并需要解析并打印本地化字段值时,您可以使用 Formatter SPI。为两个 SPI提供ConversionService\n统一的类型转换 API。
在 Spring MVC 的特定用例中,框架本身能够在处理 HTTP 请求时处理简单类型。
\n类型转换是根据配置的转换器集自动应用的,尽管可以使用DataBinders和前面提到的格式化系统来调整该行为。请参阅相关文档。
例如,在处理读取和写入 HTTP 请求和响应正文的典型用例中,当使用 时@RequestBody,Spring 将使用一堆不同的预配置 HttpMessageConverter实现:实际注册的实现将取决于您的配置和例如,在您的项目中导入的库 - 例如杰克逊。我无法在文档中找到这一点,但这里是实际源代码的链接。
请考虑查看这个相关的SO问题,它可能会有所帮助。
\n| 归档时间: |
|
| 查看次数: |
823 次 |
| 最近记录: |