springboot 学习一

SpringBoot实战:从入门到精通
这篇博客详细介绍了SpringBoot的使用,包括创建项目、返回Json、热部署、数据库连接、JPA、JdbcTemplate、配置管理、定时任务、Druid数据源监控、AOP日志处理、邮件发送、单元测试、国际化支持等内容,覆盖了SpringBoot的诸多核心功能和实战技巧。

目录

一.创建基础springboot项目

二.返回Json字符串

三.SpringBoot热部署

四.使用别的Json框架

五.全局异常捕捉

六.连接数据库

七.JPA-Hibernate 使用

八.使用JPA保存数据

九.使用jdbcTemplete

十.springboot修改端口号

十一.配置context path

十二.改变JDK编译版本

十三.处理静态资源(默认映射)

十四.定时任务的使用

十五.Spring Boot使用Druid和监控配置 数据源

十六.Spring Boot普通类调用bean

十七.使用模板(thymeleaf-freemarker)

十八.Spring Boot 添加JSP支持

十九.Spring Boot Servlet

二十.Spring Boot过滤器、监听器

二十一.Spring Boot 拦截器HandlerInterceptor

二十二.Spring Boot启动加载数据CommandLineRunner(服务加载时就调用)

二十三.Spring Boot环境变量读取和属性对象的绑定

二十四.Spring Boot使用自定义的properties

二十五.改变自动扫描的包

二十六.Spring Boot Junit单元测试

二十七.SpringBoot启动时的Banner设置 (例如springboot图标)

二十八.Spring boot 文件上传(多文件上传)

二十九.导入时如何定制spring-boot依赖项的版本

三十.Boot导入XML配置 (例:application-bean.xml)

三十一.使用@SpringBootApplication注解

三十二. 监控和管理生产环境

三十三.Spring Boot的启动器Starter详解

三十四.Spring Boot集成Redis实现缓存机制

三十五.Spring Boot Cache理论篇

三十六.Spring Boot集成EHCache实现缓存机制

三十七.Spring Boot分布式Session状态保存Redis

三十八.Spring Boot Shiro权限管理

三十九.springboot + devtools(热部署)

四十.Spring Boot 使用Java代码创建Bean并注册到Spring中

四十一.Spring Boot多数据源

四十二.Spring Boot动态数据源(多数据源自动切换)

四十三.Spring Boot日志记录SLF4J

四十四.Spring Boot MyBatis连接Mysql数据库

四十五.Spring Boot中使用AOP统一处理Web请求日志

四十六.Spring Boot发送邮件

四十七.spring boot单元测试restfull API

四十八. spring boot日志升级篇—理论

四十九.Spring Boot日志升级篇—log4j

五十.spring boot属性文件之多环境配置

五十一.spring boot日志升级篇—log4j多环境不同日志级别的控制

五十二.spring boot日志升级篇—logback

五十三.spring boot 服务配置和部署

五十四.spring boot中使用@Async实现异步调用

五十五.Spring 自定义properties升级篇

五十六.Spring 自定义properties升级篇

五十七.Spring Boot国际化(i18n)

五十八. Spring Boot Validator校验



一.创建基础springboot项目

1.1引入父工程

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.3.3.RELEASE</version>
  </parent>

1.2创建为web项目

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

1.3springboot入口

(1)SpringBootApplication:引入相应的配置

(2)RestController :返回json字符串,可用reful风格接口

/**
 * Date: 2018/7/28
 * Author: LLLiGJ
 * Desc: 启动类
 */
@RestController
@SpringBootApplication
public class MainClass {

    @RequestMapping("/")
    public String hello(){
        return "hello";
    }
    
    public static void main(String[] args) {
        SpringApplication.run(MainClass.class, args);
    }
}

二.返回Json字符串

2.1 返回Json字符串

/**
 * Date: 2018/7/28
 * Author: LLLiGJ
 * Desc: 返回JSON数据
 */
@RestController
@RequestMapping("/Demo001")
public class Demo001Controller {

    @RequestMapping("/getDemo001")
    public Demo001 getDemo001(){
        Demo001 demo001 = new Demo001();
        demo001.setId(1L);
        demo001.setName("LGJ");
        return demo001 ;
    }
}

2.2启动类

/**
 * Date: 2018/7/28
 * Author: LLLiGJ
 * Desc: 启动类
 */
@RestController
@SpringBootApplication
public class App {

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

三.SpringBoot热部署

3.1加入springload

(1)如果只是使用mvn spring-boot:run启动,只需加入以下

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>springloaded</artifactId>
      <version>1.2.4.RELEASE</version>
    </dependency>

(2)如果使用run as java application启动 :  打开 Preferences > Compiler , 勾选 Build project automatically

 

3.2方式二:依赖 spring-boot-devtools 热部署模块

  <!-- 热部署模块 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-devtools</artifactId>
      <optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
    </dependency>

 

四.使用别的Json框架

4.1使用fastJson

   <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.15</version>
    </dependency>

4.2 配置fastjson ,两种配置方式

(1)启动类继承extends WebMvcConfigurerAdapter

(2)在App.java启动类中,注入Bean : HttpMessageConverters

/**
 * Date: 2018/7/28
 * Author: LLLiGJ
 * Desc: 启动类
 */
@RestController
@SpringBootApplication
public class App {

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

    @Bean
    public HttpMessageConverters fastJsonHttpMessageConverters() {
        FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
        fastConverter.setFastJsonConfig(fastJsonConfig);
        HttpMessageConverter<?> converter = fastConverter;
        return new HttpMessageConverters(converter);
    }
}

4.3测试

**
 * Date: 2018/7/28
 * Author: LLLiGJ
 * Desc: 返回Json内容
 */
public class Demo001 {
    private long id;//主键.

    @JSONField(serialize = false)
    private String name;//测试名称.
}

五.全局异常捕捉

5.1 在class注解上@ControllerAdvice,  在方法上注解上@ExceptionHandler(value = Exception.class)

/**
 * Date: 2018/7/29
 * Author: LLLiGJ
 * Desc: 全局异常捕捉
 */
@ControllerAdvice
public class GlobalDefaultExceptionHandler {

    @ExceptionHandler(value = Exception.class)
    public void defaultErrorHandler(HttpServletRequest req, Exception e){
        e.printStackTrace();
        System.out.println("GlobalDefaultExceptionHandler.defaultErrorHandler()");
    }

}

六.连接数据库

6.1 引入mysql

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
    </dependency>

6.2 配置文件 resource/ application.properties

spring.datasource.url = jdbc:mysql://localhost:3306/test
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.max-active=20
spring.datasource.max-idle=8
spring.datasource.min-idle=8
spring.datasource.initial-size=10

七.JPA-Hibernate 使用

7.1引入依赖

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

7.2配置 resource/application.properties

########################################################
###datasource
########################################################
spring.datasource.url = jdbc:mysql://localhost:3306/test
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.max-active=20
spring.datasource.max-idle=8
spring.datasource.min-idle=8
spring.datasource.initial-size=10
########################################################
### Java Persistence Api
########################################################
spring.jpa.database = mysql  
spring.jpa.show-sql = true  
spring.jpa.hibernate.ddl-auto = update  
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy  
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect 

7.3使用

@Entity
public class Demo001 {
    @Id 
    @GeneratedValue
    private long id;//主键.

    @JSONField(serialize = false)
    private String name;//测试名称.
}

八.使用JPA保存数据

8.1 http://412887952-qq-com.iteye.com/blog/2291551

九.使用jdbcTemplete

9.1http://412887952-qq-com.iteye.com/blog/2291574

9.2  dao 使用

  /**

     * 通过id获取demo对象.

     * @param id

     * @return

     */

    public Demo getById(long id){

       String sql = "select *from Demo where id=?";

       RowMapper<Demo> rowMapper = new BeanPropertyRowMapper<Demo>(Demo.class);

       return jdbcTemplate.queryForObject(sql, rowMapper,id);

    }

十.springboot修改端口号

10.1 http://412887952-qq-com.iteye.com/blog/2291576

10.2配置

server.port=9090

十一.配置context path

11.1 http://412887952-qq-com.iteye.com/blog/2291578

11.2 Spring boot默认是/ ,这样直接通过http://ip:port/就可以访问到index页面,如果要修改为http://ip:port/path/ 访问的话,那么需要在Application.properties文件中加入server.context-path = /你的path,比如:spring-boot,那么访问地址就是http://ip:port/spring-boot 路径。

11.3 配置application.properties

server.context-path=/spring-boot

十二.改变JDK编译版本

12.1 Spring Boot在编译的时候,是有默认JDK版本的,如果我们期望使用我们要的JDK版本的话

12.2 配置maven

<plugin>
   <artifactId>maven-compiler-plugin</artifactId>
   <configuration>
      <source>1.8</source>
      <target>1.8</target>
   </configuration>
</plugin>

12.3 需要update Project

十三.处理静态资源(默认映射)

13.1 可以另外自己配置

13.2  其中默认配置的 /** 映射到 /static (或/public、/resources、/META-INF/resources)

13.3 其中默认配置的 /webjars/** 映射到 classpath:/META-INF/resources/webjars/ 

13.4 上面的 static、public、resources 等目录都在 classpath: 下面(如 src/main/resources/static)

13.5 当我们访问地址 http://localhost:8080/test.jpg 的时候,显示哪张图片?这里可以直接告诉大家,优先级顺序为:META/resources > resources > static > public  (已进行测试)

十四.定时任务的使用

14.1 定时任务

/**
 * Date: 2018/7/31
 * Author: LLLiGJ
 * Desc: 定时任务
 */
@Configuration
@EnableScheduling
public class SchedulingConfig {

    @Scheduled(cron = "0/20 * * * * ?") // 每20秒执行一次
    public void scheduler() {
        System.out.println(">>>>>>>>> SchedulingConfig.scheduler()");
    }
}

十五.Spring Boot使用Druid和监控配置 数据源

15.1 Spring Boot默认的数据源是:org.apache.tomcat.jdbc.pool.DataSource

15.2 Druid数据源:Druid是Java语言中最好的数据库连接池,并且能够提供强大的监控和扩展功能。

15.3  详情:http://412887952-qq-com.iteye.com/blog/2292362

15.4 配置

# 数据库访问配置
# 主数据源,默认
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/crm
spring.datasource.username=root
spring.datasource.password=123456
# 下面为连接池的补充设置,应用到上面所有数据源中
# 初始化大小,最小,最大
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
# 配置获取连接等待超时的时间
spring.datasource.maxWait=60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.timeBetweenEvictionRunsMillis=60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1 FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
# 打开PSCache,并且指定每个连接上PSCache的大小
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.filters=stat,wall,log4j
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合并多个DruidDataSource的监控数据
#spring.datasource.useGlobalDataSourceStat=true

15.5

/**
 * Date: 2018/7/31
 * Author: LLLiGJ
 * Desc:这样的方式不需要添加注解:@ServletComponentScan
 */
@Configuration
public class DruidConfiguration {

    @Bean
    public ServletRegistrationBean DruidStatViewServle2(){
        //org.springframework.boot.context.embedded.ServletRegistrationBean提供类的进行注册.
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid2/*");
        //添加初始化参数:initParams
        //白名单:
        servletRegistrationBean.addInitParameter("allow","127.0.0.1");
        //IP黑名单 (存在共同时,deny优先于allow) : 如果满足deny的话提示:Sorry, you are not permitted to view this page.
        servletRegistrationBean.addInitParameter("deny","192.168.1.73");
        //登录查看信息的账号密码.
        servletRegistrationBean.addInitParameter("loginUsername","admin2");
        servletRegistrationBean.addInitParameter("loginPassword","123456");
        //是否能够重置数据.
        servletRegistrationBean.addInitParameter("resetEnable","false");
        return servletRegistrationBean;

    }
    /**
     * 注册一个:filterRegistrationBean
     * @return
     */
    @Bean
    public FilterRegistrationBean druidStatFilter2(){
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
        //添加过滤规则.
        filterRegistrationBean.addUrlPatterns("/*");
        //添加不需要忽略的格式信息.
        filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid2/*");
        return filterRegistrationBean;

    }



}

十六.Spring Boot普通类调用bean

16.1  我们知道如果我们要在一个类使用spring提供的bean对象,我们需要把这个类注入到spring容器中,交给spring容器进行管理,但是在实际当中,我们往往会碰到在一个普通的Java类中,想直接使用spring提供的其他对象或者说有一些不需要交给spring管理,但是需要用到spring里的一些对象。

16.2  http://412887952-qq-com.iteye.com/blog/2292388

十七.使用模板(thymeleaf-freemarker)

1.生成模板

2.http://412887952-qq-com.iteye.com/blog/2292402

十八.Spring Boot 添加JSP支持

1.默认不推荐jsp

2.http://412887952-qq-com.iteye.com/blog/2292471

十九.Spring Boot Servlet

1.Spring boot 的主 Servlet 为 DispatcherServlet,其默认的url-pattern为“/”。

2.在spring boot中添加自己的Servlet有两种方法,代码注册Servlet和注解自动注册(Filter和Listener也是如此)

3.http://412887952-qq-com.iteye.com/blog/2292472

二十.Spring Boot过滤器、监听器

1.http://412887952-qq-com.iteye.com/blog/2292475

二十一.Spring Boot 拦截器HandlerInterceptor

1.HandlerInterceptor 的功能跟过滤器类似,但是提供更精细的的控制能力:在request被响应之前、request被响应之后、视图渲染之前以及request全部结束之后。我们不能通过拦截器修改request内容,但是可以通过抛出异常(或者返回false)来暂停request的执行。

2.http://412887952-qq-com.iteye.com/blog/2292476

二十二.Spring Boot启动加载数据CommandLineRunner(服务加载时就调用)

1.实际应用中,我们会有在项目服务启动的时候就去加载一些数据或做一些事情这样的需求。 
为了解决这样的问题,Spring Boot 为我们提供了一个方法,通过实现接口 CommandLineRunner 来实现。

2.http://412887952-qq-com.iteye.com/blog/2292577

二十三.Spring Boot环境变量读取和属性对象的绑定

1.凡是被Spring管理的类,实现接口 EnvironmentAware 重写方法 setEnvironment 可以在工程启动时,获取到系统环境变量和application配置文件中的变量。

2.@Controller @Service 等被Spring管理的类都支持,注意重写的方法 setEnvironment 是在系统启动的时候被执行。 

3.http://412887952-qq-com.iteye.com/blog/2292727

二十四.Spring Boot使用自定义的properties

1.spring boot使用application.properties默认了很多配置。但需要自己添加一些配置的时候

2.http://412887952-qq-com.iteye.com/blog/2292728

二十五.改变自动扫描的包

1.在开发中我们知道Spring Boot默认会扫描启动类同包以及子包下的注解,那么如何进行改变这种扫描包的方式呢

2.@ComponentScan注解进行指定要扫描的包以及要扫描的类。

3.http://412887952-qq-com.iteye.com/blog/2292733

二十六.Spring Boot Junit单元测试

1.http://412887952-qq-com.iteye.com/blog/2292739

二十七.SpringBoot启动时的Banner设置 (例如springboot图标)

1.http://412887952-qq-com.iteye.com/blog/2293214

二十八.Spring boot 文件上传(多文件上传)

1.文件上传:http://412887952-qq-com.iteye.com/blog/2293385

二十九.导入时如何定制spring-boot依赖项的版本

1.http://412887952-qq-com.iteye.com/blog/2293520

三十.Boot导入XML配置 (例:application-bean.xml)

1.Spring Boot理念就是零配置编程,但是如果绝对需要使用XML的配置,我们建议您仍旧从一个@Configuration类开始,你可以使用@ImportResouce注解加载XML配置文件

2.http://412887952-qq-com.iteye.com/blog/2293846

三十一.使用@SpringBootApplication注解

1.很多Spring Boot开发者总是使用 @Configuration , @EnableAutoConfiguration 和 @ComponentScan 注解他们的main类。由于这些注解被如此频繁地一块使用(特别是你遵循以上最佳实践时),Spring Boot提供一个方便的 @SpringBootApplication 选择。@SpringBootApplication 注解等价于以默认属性使用 @Configuration ,@EnableAutoConfiguration 和 @ComponentScan 。

2.http://412887952-qq-com.iteye.com/blog/2293849

三十二. 监控和管理生产环境

1.spring-boot-actuator模块提供了一个监控和管理生产环境的模块,可以使用http、jmx、ssh、telnet等拉管理和监控应用。审计(Auditing)、健康(health)、数据采集(metrics gathering)会自动加入到应用里面。

2.http://412887952-qq-com.iteye.com/blog/2293900

三十三.Spring Boot的启动器Starter详解

1.Spring Boot应用启动器基本的一共有N(现知道的是44)种

2.http://412887952-qq-com.iteye.com/blog/2294926

三十四.Spring Boot集成Redis实现缓存机制

1.http://412887952-qq-com.iteye.com/blog/2294942

2.自定义key策略

3.额外:https://www.jianshu.com/p/fc076b6c2a13

三十五.Spring Boot Cache理论篇

1.Spring 3.1 引入了激动人心的基于注释(annotation)的缓存(cache)技术,它本质上不是一个具体的缓存实现方案(例如EHCache 或者 OSCache、Redis等),而是一个对缓存使用的抽象,通过在既有代码中添加少量它定义的各种 annotation,即能够达到缓存方法的返回对象的效果。

2.http://412887952-qq-com.iteye.com/blog/2294945

三十六.Spring Boot集成EHCache实现缓存机制

1.另一种缓存技术

2.http://412887952-qq-com.iteye.com/blog/2294952

三十七.Spring Boot分布式Session状态保存Redis

1.在使用spring boot做负载均衡的时候,多个app之间的session要保持一致,这样负载到不同的app时候,在一个app登录之后,而访问到另外一台服务器的时候,session丢失。

2.http://412887952-qq-com.iteye.com/blog/2295146

三十八.Spring Boot Shiro权限管理

1.Shiro是Apache下的一个开源项目,我们称之为Apache Shiro。它是一个很易用与Java项目的的安全框架,提供了认证、授权、加密、会话管理,与 Spring Security 一样都是做一个权限的安全框架,但是与Spring Security 相比,在于 Shiro 使用了比较简单易懂易于使用的授权方式

2.http://412887952-qq-com.iteye.com/blog/2299732

3.http://412887952-qq-com.iteye.com/blog/2299777

4. 缓存配置

http://412887952-qq-com.iteye.com/blog/2299780        

5.记住密码:

http://412887952-qq-com.iteye.com/blog/2299784

三十九.springboot + devtools(热部署)

1.http://412887952-qq-com.iteye.com/blog/2300313

四十.Spring Boot 使用Java代码创建Bean并注册到Spring中

1.http://412887952-qq-com.iteye.com/blog/2301642

四十一.Spring Boot多数据源

1.就是读取配置文件,根据配置文件中的配置的数据源数量,动态创建dataSource并注册到Spring中。

2.http://412887952-qq-com.iteye.com/blog/2302997

四十二.Spring Boot动态数据源(多数据源自动切换)

1.http://412887952-qq-com.iteye.com/blog/2303075

四十三.Spring Boot日志记录SLF4J

1.SLF4J(Simple Logging Facade For Java)的logback来输出日志,其比log4j 要好,因为他效率更高。

2.Spring Boot 提供了一套日志系统,logback是最优先的选择

3.http://412887952-qq-com.iteye.com/blog/2303102

四十四.Spring Boot MyBatis连接Mysql数据库

1.http://412887952-qq-com.iteye.com/blog/2303121

四十五.Spring Boot中使用AOP统一处理Web请求日志

1.http://412887952-qq-com.iteye.com/blog/2305333

四十六.Spring Boot发送邮件

1.http://412887952-qq-com.iteye.com/blog/2305992

四十七.spring boot单元测试restfull API

1.http://412887952-qq-com.iteye.com/blog/2306429

四十八. spring boot日志升级篇—理论

1.控制台输出

2.文件输出

3.级别控制

4.http://412887952-qq-com.iteye.com/blog/2306441

四十九.Spring Boot日志升级篇—log4j

1.http://412887952-qq-com.iteye.com/blog/2306974

五十.spring boot属性文件之多环境配置

1.spring boot 配置处理器

2.使用随机数

3.通过命令行设置属性值

4.多环境配置

5.@Profile("dev")表明只有Spring定义的Profile为dev时才会实例化DevEmailService这个类。那么如何设置Profile呢?

6.http://412887952-qq-com.iteye.com/blog/2307104

五十一.spring boot日志升级篇—log4j多环境不同日志级别的控制

1.http://412887952-qq-com.iteye.com/blog/2307194

五十二.spring boot日志升级篇—logback

1.http://412887952-qq-com.iteye.com/blog/2307244

五十三.spring boot 服务配置和部署

1,Spring Boot 其默认是集成web容器的,启动方式由像普通Java程序一样,main函数入口启动。其内置Tomcat容器或Jetty容器,具体由配置来决定(默认Tomcat)。当然你也可以将项目打包成war包,放到独立的web容器中(Tomcat、weblogic等等),当然在此之前你要对程序入口做简单调整。

2.http://412887952-qq-com.iteye.com/blog/2307389

五十四.spring boot中使用@Async实现异步调用

1.异步调用指程序在顺序执行时,不等待异步调用的语句返回结果就执行后面的程序。

2.http://412887952-qq-com.iteye.com/blog/2309126

五十五.Spring 自定义properties升级篇

1.在application.properties文件中添加自定义属性(单个属性使用)

2.在application.properties文件中添加自定义属性(多个属性使用);

3.配置数组注入;

4.自定义.properties

五十六.Spring 自定义properties升级篇

1.http://412887952-qq-com.iteye.com/blog/2311017

五十七.Spring Boot国际化(i18n)

1.http://412887952-qq-com.iteye.com/blog/2312274

五十八. Spring Boot Validator校验

1.校验框架

2.http://412887952-qq-com.iteye.com/blog/2312356

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值