spring security(1)

常见注解,json view,valid注解和bindingresult使用,开发自定义注解

编辑工具favorites 使用

restful 常见注解

@requestParam 请求参数
@PageableDefault 指定分页参数默认值
@PathVarible 映射url片段到java方法的参数
@RequestBody 映射请求体到java方法的参数
@JsonView
	1.使用接口来声明多个视图
	2.在值对象的get方法上指定视图
	3.在Controller方法上指定视图

json view使用

第1,2步,这里使用lombok,具体可以百度
@Data
@ToString
public class User {

    public interface UserSimpleView {
    }

    public interface UserDetailView extends UserSimpleView {
    }

    @JsonView(UserSimpleView.class)
    private int id;

    @MyConstraint(message = "这是一个测试")
    @JsonView(UserSimpleView.class)
    private String username;

    @NotBlank
    @JsonView(UserDetailView.class)
    private String password;

    @Past(message = "生日必须是过去")
    @JsonView(UserSimpleView.class)
    private Date birthday;
}

第3步
@GetMapping(value = "/{id}")
    @JsonView(User.UserDetailView.class)
    public User getInfo(@PathVariable String id) {
        User user = new User();
        user.setUsername("tom");
        return user;
    }

jsonpath

$— json数据的根元素
https://github.com/json-path/JsonPath

日期类型参数的处理

	建议前后台用时间戳来传输

@Valid注解 约束

	@notblank  不为空

BindingResult验证请求参数的合法性并处理校验结果

@valid 一般情况下与bindingresult 同时使用,单@valid获取到检验不能通过时,
会将error 给bindingresult(比如下面代码

public User create(@Valid @RequestBody User user, BindingResult error) {
        if (error.hasErrors()) {
            error.getAllErrors().stream().forEach(err -> {
                System.out.println(err.getDefaultMessage());
            });
        	}
        }
        

hibernate validator

注解意义
@Notnull值不能为空
@Null值必须为空
@Pattern(regex=)字符串必须匹配正则表达式
@Size(min=,max=)集合的元素必须在min和max之间
@Email字符串必须是Email地址
@Length(min=,max=)检查字符串的长度
@NotBlank字符串必须有字符
@NotEmpty字符串不为null,集合有元素
@Range(min=,max=)数字必须大于min 小于max
@SafeHtml字符串是安全的Html
@URL字符串是合法的URl
@AssertFalse值必须是false
@AssertTrue值必须是true
@DecimalMax(value=, inclusive=false)值必须小value
@Min(value)值必须大于value, 只能注解到数值上啊
@Future值必须是未来的日期
@Past值必须是以前的日期

开发自定义valid注解

创建@inteface注解


import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;

/**
 * @author mjp
 * @ClassName : MyConstraint
 * @Date: 2019/5/30 13:56
 * @Description: 自定义valid注解
 * @Copyright 2019 www.videasoft.com Inc. All rights reserved.
 * 注意:本内容仅限于苏州微缔软件股份有限公司内部传阅,禁止外泄以及用于其他的商业目的
 * @Version 1.0
 */
// 注解位置
@Target({ElementType.METHOD,ElementType.FIELD})
// 运行时注解
@Retention(RetentionPolicy.RUNTIME)
// 当前注解用什么类来验证
@Constraint(validatedBy = MyConstraintValidator.class)
public @interface MyConstraint {
    /**
     * 这三个属性必须有
     * @return
     */
    String message();
    Class<?>[] groups() default { };
    Class<? extends Payload>[] payload() default { };

}

编写注解验证类


import com.imooc.validator.service.HelloService;
import org.springframework.beans.factory.annotation.Autowired;

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

/**
 * @author mjp
 * 此处不需要添加@Component 等spring注解,就可以直接获取到spring的bean对象
 * 这是因为
 * Sprin容器,发现这个类实现了
 *      ConstraintValidator 这个借口会自动注入
 *
 */

public class MyConstraintValidator implements ConstraintValidator<MyConstraint,Object> {


    @Autowired
    private HelloService helloService;
    /**
     * 初始化
      * @param constraintAnnotation
     */
    @Override
    public void initialize(MyConstraint constraintAnnotation) {
        System.out.println("MyConstraintValidator init");
    }

    /**
     * 检验逻辑
     * @param value   校验值
     * @param context  校验上下文
     * @return
     */
    @Override
    public boolean isValid(Object value, ConstraintValidatorContext context) {
        helloService.greeting("123 jj");
        System.out.println(value);
        return false;
    }
}

使用


    @MyConstraint(message = "这是一个测试")
    @JsonView(UserSimpleView.class)
    private String username;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值