发布于 2016-01-29 15:05:20 | 212 次阅读 | 评论: 0 | 来源: 分享

这里有新鲜出炉的精品教程,程序狗速度看过来!

Spring Boot

Spring Boot 项目旨在简化创建产品级的 Spring 应用和服务。你可通过它来选择不同的 Spring 平台。可创建独立的 Java 应用和 Web 应用,同时提供了命令行工具来允许 'spring scripts'.


在《Spring Boot: 定制HTTP消息转换器》一文中我们学习了如何配置消息转换器用于HTTP请求和响应数据,实际上,在一次请求的完成过程中还发生了其他的转换,我们这次关注将参数转换成多种类型的对象,如:字符串转换成Date对象或字符串转换成Integer对象。

在编写控制器中的action方法时,Spring允许我们使用具体的数据类型定义函数签名,这是通过PropertyEditor实现的。PropertyEditor本来是JDK提供的API,用于将文本值转换成给定的类型,结果Spring的开发人员发现它恰好满足Spring的需求——将URL参数转换成函数的参数类型。

针对常用的类型(Boolean、Currency和Class),Spring MVC已经提供了很多PropertyEditor实现。假设我们需要创建一个Isbn类并用它作为函数中的参数。

How Do

  • 考虑到PropertyEditor属于工具范畴,选择在项目根目录下增加一个包——utils。在这个包下定义Isbn类和IsbnEditor类,各自代码如下:
    Isbn类:
package com.test.bookpub.utils;

public class Isbn {
    private String isbn;

    public Isbn(String isbn) {
        this.isbn = isbn;
    }
    public String getIsbn() {
        return isbn;
    }
}
  • IsbnEditor类,继承PropertyEditorSupport类,setAsText完成字符串到具体对象类型的转换,getAsText完成具体对象类型到字符串的转换。
package com.test.bookpub.utils;
import org.springframework.util.StringUtils;
import java.beans.PropertyEditorSupport;

public class IsbnEditor extends PropertyEditorSupport {
    @Override
    public void setAsText(String text) throws IllegalArgumentException {
        if (StringUtils.hasText(text)) {
            setValue(new Isbn(text.trim()));
        } else {
            setValue(null);
        }
    }
    @Override    public String getAsText() {
        Isbn isbn = (Isbn) getValue();
        if (isbn != null) {
            return isbn.getIsbn();
        } else {
            return "";
        }
    }
}
  • 在BookController中增加initBinder函数,通过@InitBinder注解修饰,则可以针对每个web请求创建一个editor实例。
@InitBinderpublic 
void initBinder(WebDataBinder binder) {
    binder.registerCustomEditor(Isbn.class, new IsbnEditor());
}
  • 修改BookController中对应的函数
@RequestMapping(value = "/{isbn}", method = RequestMethod.GET)
public Map getBook(@PathVariable Isbn isbn) {
    Book book =  bookRepository.findBookByIsbn(isbn.getIsbn());
    Map response = new LinkedHashMap();
    response.put("message", "get book with isbn(" + isbn.getIsbn() +")");
    response.put("book", book);    return response;
}

运行程序,通过Httpie访问http localhost:8080/books/9781-1234-1111,可以得到正常结果,跟之前用String表示isbn时没什么不同,说明我们编写的IsbnEditor已经起作用了。

分析

Spring提供了很多默认的editor,我们也可以通过继承PropertyEditorSupport实现自己定制化的editor。

由于ProperteyEditor是非线程安全的。通过@InitBinder注解修饰的initBinder函数,会为每个web请求初始化一个editor实例,并通过WebDataBinder对象注册。



历史版本 :
Spring Boot 工具 Spring Cloud Skipper 1.0 RC1 发布
Spring Boot 开发的后台管理系统 icec 正式发布 1.0 版本
Spring Boot企业级开发基础框架 SLife 加入 Activiti 模块
Spring Boot 2.0.0.M7 发布,配置更改
Spring Boot 1.5.9 发布,Spring 应用快速构建框架
Spring Boot 1.5.8 发布,简化创建产品级 Spring 应用
Spring Boot 2.0.0.M5 发布,离正式版又近一步
Spring Boot 2.0.0 M4 发布,离正式版又近一步
Spring Boot 1.5.7 发布,包含多处修复和改进
Spring Boot 1.5.6 发布,微服务入门级微框架
Spring Boot 2.0.0.M3 发布,,微服务的入门级微框架
Spring Boot 1.5.5 发布,微服务入门级微框架
最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务