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;
}
拦截器和过滤器的区别
以下是我在别处找到的过滤器与拦截器的不同之处
拦截器是基于动态代理的,而过滤器是基于函数回调。
拦截器不依赖于servlet容器,通过动态代理实现,过滤器依赖于servlet容器。
拦截器可以在方法前后,异常前后等调用,而过滤器只能在请求前和请求后各调用一次。
拦截器可以利用依赖注入,因此在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实现接口
在application 上加上注解@EnableSwagger2
引入pom文件
打开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()用于方法,参数,字段说明;