Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >SpringMVC注解 @initbinder 解决类型转换问题

SpringMVC注解 @initbinder 解决类型转换问题

作者头像
微风-- 轻许--
发布于 2019-07-02 06:07:40
发布于 2019-07-02 06:07:40
60500
代码可运行
举报
文章被收录于专栏:java 微风java 微风
运行总次数:0
代码可运行

使用 SpringMVC 时,常遇到表单中日期字符串和 JavaBean 的 Date 类型的转换,而 SpringMVC 默认不支持这个格式的转换,故需要手动配置,自定义数据的绑定才能解决这个问题。 在需要日期转换的 Controller 中使用 SpringMVC 的注解 @initbinder 和 Spring 自带的 WebDateBinder 类来操作。 WebDataBinder 是用来绑定请求参数到指定的属性编辑器.由于前端传到 controller 里的值是 String 类型的,当往 Model 里 Set这个值的时候,如果 set 的这个属性是个对象,Spring 就会去找到对应的 editor 进行转换,然后再 SET 进去。 代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@InitBinder  
public void initBinder(WebDataBinder binder) {  
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");  
    dateFormat.setLenient(false);  
    binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));  
}

需要在SpringMVC的配置文件加上

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- 解析器注册 -->  
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">  
    <property name="messageConverters">  
        <list>  
            <ref bean="stringHttpMessageConverter"/>  
        </list>  
    </property>  
</bean>  
<!-- String类型解析器,允许直接返回String类型的消息 -->  
<bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter"/> 

换种写法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<mvc:annotation-driven>
    <mvc:message-converters>
        <bean class="org.springframework.http.converter.StringHttpMessageConverter">
            <constructor-arg value="UTF-8"/>
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>

拓展: spring mvc在绑定表单之前,都会先注册这些编辑器,Spring自己提供了大量的实现类,诸如CustomDateEditor ,CustomBooleanEditor,CustomNumberEditor等许多,基本上够用。 使用时候调用WebDataBinder的registerCustomEditor方法 registerCustomEditor源码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void registerCustomEditor(Class<?> requiredType, PropertyEditor propertyEditor) {
    getPropertyEditorRegistry().registerCustomEditor(requiredType, propertyEditor);
}

第一个参数 requiredType 是需要转化的类型。 第二个参数 PropertyEditor 是属性编辑器,它是个接口,以上提到的如 CustomDateEditor 等都是继承了实现了这个接口的PropertyEditorSupport 类。 我们也可以不使用他们自带的这些编辑器类。 我们可以自己构造:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import org.springframework.beans.propertyeditors.PropertiesEditor;

public class DoubleEditor extends PropertyEditorSupport {
    @Override
    public void setAsText(String text) throws IllegalArgumentException {
        if (text == null || text.equals("")) {
            text = "0";
        }
        setValue(Double.parseDouble(text));
    }

    @Override
    public String getAsText() {
        return getValue().toString();
    }
}

转自:https://www.cnblogs.com/soundcode/p/6519036.html

另一举例文章见 :SpringMvc 注解 @InitBinder 表单多对象精准绑定接收

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年06月19日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
彻底搞懂 Elasticsearch Java API
在明确了ES的基本概念和使用方法后,我们来学习如何使用ES的Java API. 本文假设你已经对ES的基本概念已经有了一个比较全面的认识。
小勇DW3
2019/07/08
10K0
java elasticsearch-rest-high-level-client 根据歌名搜索,创建索引,根据索引ID搜索
oktokeep
2024/10/09
760
Elasticsearch JavaApi
 官网JavaApi地址:https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-search.html
用户1518699
2018/09/12
1.7K0
ElasticSearch入门之彼行我释(四)
散仙在上篇文章中,介绍了关于ElasticSearch基本的增删改查的基本粒子,本篇呢,我们来学下稍微高级一点的知识: (1)如何在ElasticSearch中批量提交索引 ? (2)如何使用高级查询(包括,检索,排序,过滤,分页) ? (3)如何组合多个查询 ? (4)如何使用翻页深度查询 ? (5)如何使用基本的聚合查询 ? (一)首先,我们思考下,为什么要使用批量添加,这个毫无疑问,因为效率问题,举个在生活中的例子,假如我们有50个人,要去美国旅游,不使用批处理的方式是,给每一个
我是攻城师
2018/05/11
9120
ElasticSearch的基本操作
Easticsearch 的官方地址:https://www.elastic.co/cn/
shaoshaossm
2022/12/27
7730
ElasticSearch的基本操作
ElasticSearch入门
    全文搜索属于最常见的需求,开源的 Elasticsearch是目前全文搜索引擎的首选。它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github 都采用它。 ElasticSearch 的底层是开源库 Lucene,Elasticsearch 是 Lucene 的封装,它提供了 REST API 的操作接口,开箱即用。
Java架构师必看
2021/05/14
1.2K0
ES索引模糊查询
1. 准备环境 docker pull elasticsearch:6.7.0 docker pull kibana:6.7.0 docker run -it --name elasticsearch -d -p 9200:9200 -p 9300:9300 elasticsearch:6.7.0 docker run --link elasticsearch -p 5601:5601 --name kibana -d kibana:6.7.0 2. java代码 2.1 pom引入 <el
平常心
2020/10/14
3K0
ES索引模糊查询
【Elasticsearch系列五】Java API
Logstash 的工作是从 MySQL 中读取数据,向 ES 中创建索引,这里需要提前创建 mapping 的模板文件以便 logstash 使用。
kwan的解忧杂货铺
2024/09/16
2920
基于Luence的分布式搜索引擎ElasticSearch搜索实例演示(Java API)
安装包下载 当前最新版本为:0.20.6 http://www.elasticsearch.org/download/ 
星哥玩云
2022/07/04
3200
基于Luence的分布式搜索引擎ElasticSearch搜索实例演示(Java API)
使用Java操作Elasticsearch(Elasticsearch的java api使用)
1、Elasticsearch是基于Lucene开发的一个分布式全文检索框架,向Elasticsearch中存储和从Elasticsearch中查询,格式是json。
别先生
2019/10/23
11.4K0
使用Java操作Elasticsearch(Elasticsearch的java api使用)
Elasticsearch硬核入门教程(2022最全)
The Elastic Stack, 包括 Elasticsearch、Kibana、Beats 和 Logstash(也称为 ELK Stack)。能够安全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、分析和可视化。Elaticsearch,简称为ES, ES是一个开源的高扩展的分布式全文搜索引擎,是整个Elastic Stack技术栈的核心。它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。
小熊学Java
2023/07/16
3.1K0
Elasticsearch硬核入门教程(2022最全)
ES Java API之增删改查
TransportClient可用于老版本的Elasticsearch;新版本建议使用Java High Level REST Client(向下兼容);当然还可以使用Spring Data提供的Spring Data Elasticsearch。
行百里er
2020/12/02
3K0
ES Java API之增删改查
ES - 使用ES客户端来操作搜索引新
1 导入需要的pom <dependencies> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>7.3.0</version> </dependency> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactI
用户5927264
2019/08/26
1.6K0
ElasticSearch客户端调用
在elasticsearch官网中提供了各种语言的客户端:https://www.elastic.co/guide/en/elasticsearch/client/index.html
兜兜转转
2023/03/29
3.4K0
ElasticSearch客户端调用
Elasticsearch就是这么简单
一、前言 最近有点想弄一个站内搜索的功能,之前学过了Lucene,后来又听过Solr这个名词。接着在了解全文搜索的时候就发现了Elasticsearch这个,他也是以Lucene为基础的。 我去搜了几篇Elasticsearch教程,发现很多都是基于linux的,但我linux耍得并不熟,很少用。仅仅会一些简单的命令,等真正去用到linux的时候再慢慢啃吧。 于是发现了一篇写得很好的教程: http://blog.csdn.net/laoyang360/article/details/52244917 首先
Java3y
2018/04/02
1.6K0
Elasticsearch就是这么简单
elasticsearch的restful API和Java API
本人现在使用的是elasticsearch 5.2.1的,服务器IP为192.168.5.182.所以在Java API和jar包中会有所不同.
算法之名
2019/08/20
2K0
【详解】ElasticSearchJava操作ES实例
Elasticsearch 是一个分布式的搜索和分析引擎,广泛用于全文搜索、日志分析等场景。本文将介绍如何在 Java 应用中使用 Elasticsearch 客户端来连接和操作 Elasticsearch 集群。
大盘鸡拌面
2025/01/19
1280
【ES三周年】吊打Elasticsearch 和Java API(进阶保姆级教程-3)
上一篇我们通过kibana的可视化界面,对es的索引以及文档的常用操作做了毕竟详细的总结,本篇将介绍如何使用java完成对es的操作,这也是实际开发中将要涉及到的。
北京-宏哥
2023/04/12
20.5K1
【ES三周年】吊打Elasticsearch 和Java API(进阶保姆级教程-3)
02_ElasticSearch索引操作总结归纳
只要name中包含手机、手、机都会被查询出来.会对手机进行分词,多个词语之间的关系默认为or。如果要精准查询,需要将操作改为and关系.
全栈程序员站长
2021/07/13
1.3K0
ElasticSearch快速入门(二)
包括最大值(max)、最小值(min)、平均值(avg)、求和(sum)、总数(count)、 去重后求总数(cardinality)、返回所有度量类型的统计(stats)等等。
十玖八柒
2022/08/01
9940
ElasticSearch快速入门(二)
相关推荐
彻底搞懂 Elasticsearch Java API
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文