springboot使用验证valid

可以使用自定义的valid

MyValidator类(interface类),还需要写校验规则

/**
 * 
 */
package com.imooc.validator;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import javax.validation.Constraint;
import javax.validation.Payload;

/**
 * @author zhailiang
 *
 */
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = MyConstraintValidator.class)
public @interface MyConstraint {

    String message();

    Class<?>[] groups() default { };

    Class<? extends Payload>[] payload() default { };

}

自定义接口类

/**
 * 
 */
package com.cbw.validator;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

import org.springframework.beans.factory.annotation.Autowired;

import com.imooc.service.HelloService;

/**
 * @author zhailiang
 *
 */
public class MyConstraintValidator implements ConstraintValidator<MyConstraint, Object> {

    @Autowired
    private HelloService helloService;

    @Override
    public void initialize(MyConstraint constraintAnnotation) {
        System.out.println("my validator init");
    }

    @Override
    public boolean isValid(Object value, ConstraintValidatorContext context) {
        helloService.greeting("tom");
        System.out.println(value);
        return false;
    }

}

对类进行校验

public class User {

    public interface UserSimpleView {};
    public interface UserDetailView extends UserSimpleView {};

    private String id;

    @MyConstraint(message = "这是一个测试")
    private String username;
    }

springboot多个filter

spring boot 配置Filter过滤器中简单介绍了spring boot 中如何添加过滤器,有人问到如果配置多个怎么控制,先经过哪个过滤器,后经过哪个过滤器。在web.xml中,我们知道,执行顺序是谁在前边执行谁。

在spring boot中的FilterRegistrationBean注册过滤器的类中有个order属性,

private int order = Ordered.LOWEST_PRECEDENCE;

细看源码可以知道,这个order的默认值是Integer.MAX_VALUE 也就是int的最大值,

spring boot 会按照order值的大小,从小到大的顺序来依次过滤。

/**
     * 配置过滤器
     * @return
     */
    @Bean
    @Order(Integer.MAX_VALUE)
    public FilterRegistrationBean someFilterRegistration() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(sessionFilter());
        registration.addUrlPatterns("/*");
        registration.addInitParameter("paramName", "paramValue");
        registration.setName("sessionFilter");
        return registration;
    }

或者

  /**
     * 配置过滤器
     * @return
     */
    @Bean
    public FilterRegistrationBean someFilterRegistration() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(sessionFilter());
        registration.addUrlPatterns("/*");
        registration.addInitParameter("paramName", "paramValue");
        registration.setName("sessionFilter");
        registration.setOrder(Integer.MAX_VALUE);
        return registration;
    }

拦截器和过滤器的区别

以下是我在别处找到的过滤器与拦截器的不同之处

  1. 拦截器是基于动态代理的,而过滤器是基于函数回调。

  2. 拦截器不依赖于servlet容器,通过动态代理实现,过滤器依赖于servlet容器。

  3. 拦截器可以在方法前后,异常前后等调用,而过滤器只能在请求前和请求后各调用一次。

  4. 拦截器可以利用依赖注入,因此在Spring框架程序中,优先拦截器。

就个人目前来看,最大的区别是Filter过滤器可以作用于Servlet及Controller。而拦截器无法拦截到发送至Servlet中的请求,只能拦截到Controller中的。

文件上传下载用到的包

<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
</dependency>

使用swagger实现接口

  1. 在application 上加上注解@EnableSwagger2

  2. 引入pom文件

  3. 打开localhost:8060/swagger-ui.html

        <!-- 文档自动生成 -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.4.0</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.4.0</version>
        </dependency>

常用注解:

@ApiModelProperty() 用于方法,字段

@ApiOperation()用于方法;

@ApiParam()用于方法,参数,字段说明;

results matching ""

    No results matching ""