Spring自定义属性编辑器——2

此自定义属性编辑器用于将String转换为Date类型,具体代码如下:

  • 目录结构
    这里写图片描述

  • DateEditor

package com.xiayc.dateeditor.editor;

import org.springframework.util.StringUtils;

import java.beans.PropertyEditorSupport;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * Created by xyc on 2017/8/5 0005.
 */
public class DateEditor extends PropertyEditorSupport {
    /**
     * 将外部设置的字符串转换为内部属性的值
     *
     * @param text The string to be parsed.
     */
    @Override
    public void setAsText(String text) throws IllegalArgumentException {
        //判断是否为空
        if (text == null || text.trim().equals("")) {
            super.setValue(null);
            return;
        }
        //判断是否为时间戳类型
        text = text.trim();
        if (text.matches("^[0-9]*$")) {
            super.setValue(new Date(Long.parseLong(text)));
            return;
        }
        //选取日期格式化格式(目前只支持:yyyy-MM-dd、HH:mm:ss、yyyy-MM-dd HH:mm:ss)
        String datePattern = null;
        if (StringUtils.countOccurrencesOf(text, "-") == 2) {
            datePattern = "yyyy-MM-dd";
        }
        if (StringUtils.countOccurrencesOf(text, ":") == 2) {
            datePattern = datePattern == null ? "HH:mm:ss" : datePattern + " HH:mm:ss";
        }
        if (datePattern == null) {
            throw new IllegalAccessError("不支持的时间格式,支持的时间格式:yyyy-MM-dd、HH:mm:ss、yyyy-MM-dd HH:mm:ss");
        }
        //进行格式化
        SimpleDateFormat format = new SimpleDateFormat(datePattern);
        try {
            super.setValue(format.parse(text));
        } catch (ParseException e) {
            throw new IllegalAccessError("格式化时间格式异常:" + e.getMessage());
        }
    }
}
  • DefaultWebBindingInitializer
package com.xiayc.dateeditor.initializer;

import com.xiayc.dateeditor.editor.DateEditor;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.support.WebBindingInitializer;
import org.springframework.web.context.request.WebRequest;

import java.util.Date;

/**
 * Created by xyc on 2017/8/5 0005.
 */
public class DefaultWebBindingInitializer implements WebBindingInitializer {
    @Override
    public void initBinder(WebDataBinder webDataBinder, WebRequest webRequest) {
        /**
         * 注册Date类型属性编辑器
         */
        webDataBinder.registerCustomEditor(Date.class, new DateEditor());
    }
}
  • DefaultBeanPostProcessor
package com.xiayc.dateeditor.processor;

import com.xiayc.dateeditor.initializer.DefaultWebBindingInitializer;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;

/**
 * Created by xyc on 2017/8/5 0005.
 */
@Component  //@Component注解用于启用此功能
public class DefaultBeanPostProcessor implements BeanPostProcessor {
    /**
     * 实例化、依赖注入完毕,在调用显示的初始化之前完成一些定制的初始化任务
     *
     * @param o
     * @param s
     * @return
     * @throws BeansException
     */
    @Override
    public Object postProcessBeforeInitialization(Object o, String s) throws BeansException {
        if (o instanceof RequestMappingHandlerAdapter) {
            RequestMappingHandlerAdapter adapter = (RequestMappingHandlerAdapter) o;
            adapter.setWebBindingInitializer(new DefaultWebBindingInitializer());
        }
        return o;
    }

    /**
     * 实例化、依赖注入、初始化完毕时执行
     *
     * @param o
     * @param s
     * @return
     * @throws BeansException
     */
    @Override
    public Object postProcessAfterInitialization(Object o, String s) throws BeansException {
        return o;
    }
}
  • DateEditorController
package com.xiayc.dateeditor.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;

/**
 * Created by xyc on 2017/8/5 0005.
 */
@RestController
@RequestMapping("/dateEditor")
public class DateEditorController {
    /**
     * 进行测试
     *
     * @param date
     * @return
     */
    @GetMapping("/test")
    public Date test(Date date) {
        System.out.println(date);
        return date;
    }
}
  • DateEditorApplication
package com.xiayc.dateeditor;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DateEditorApplication {

    public static void main(String[] args) {
        SpringApplication.run(DateEditorApplication.class, args);
    }

    /*@Bean
    public DefaultBeanPostProcessor defaultBeanPostProcessor() {    //此方法用于启用DefaultBeanPostProcessor,另一种方法是在DefaultBeanPostProcessor上加@Component注解
        return new DefaultBeanPostProcessor();
    }*/
}

github地址:https://github.com/xiayongchao/DateEditor

### Spring Boot 中富文本编辑器上传图片处理方法 #### 配置依赖项 为了在Spring Boot应用中集成UEditor富文本编辑器来支持图片上传,需先引入`ueditor-spring-boot-starter`作为Maven项目的依赖: ```xml <dependency> <groupId>com.github.tobato</groupId> <artifactId>ueditor-spring-boot-starter</artifactId> <version>x.x.x</version> </dependency> ``` 此操作确保了项目能够访问到必要的类库来进行初始化设置和功能扩展[^1]。 #### 后端控制器开发 创建用于接收前端发送过来的文件数据的服务接口。通常情况下会定义一个专门负责媒体资源管理的Controller,在其中编写针对不同类型的请求做出响应的方法。对于图像上传而言,则要特别注意对multipart/form-data格式的支持以及安全性的考量。 ```java import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @RestController @RequestMapping("/api/upload") public class UploadController { @PostMapping(value="/image", produces={"application/json;charset=UTF-8"}) public String uploadImage(@RequestParam("upfile") MultipartFile file){ // 实现具体的业务逻辑... return "{'state':'SUCCESS','url':'http://example.com/path/to/image.jpg'}"; } } ``` 上述代码片段展示了如何通过POST方式接受来自客户端提交的照片,并返回给定结构化的JSON字符串告知上传状态及新生成的URL地址。 #### 前端页面适配 当采用Vue框架构建用户界面时,可以通过自定义组件的方式轻松嵌入Quill Editor或其他类似的插件完成可视化编辑体验;而对于纯HTML/CSS/JavaScript环境来说,直接利用官方提供的API即可快速搭建起基本架构。无论哪种情况都离不开正确配置editor实例参数这一环节——特别是有关于action URL指向服务器哪一部分监听着此类事件的关键属性设定。 ```html <!-- HTML --> <textarea id="container"></textarea> <script type="text/javascript"> var ue = UE.getEditor('container',{ serverUrl : '/api/upload/image' }); ue.ready(function() { // 编辑器加载完成后执行的操作 }); </script> ``` 这段脚本说明了怎样指定远程服务路径让编辑区域内的所有多媒体对象都能顺利地被传输至后台进行持久化存储[^4]。 #### 完整流程概述 整个过程涉及到了前后两端紧密协作才能达成预期效果:一方面依靠后端提供稳定可靠的RESTful API供调用者发起HTTP请求并将结果封装成易于解析的形式反馈回去;另一方面则是在视图层面上精心设计交互细节使得最终呈现出的效果既美观又实用。两者缺一不可共同构成了完整的解决方案[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值