Controller相关注解
@RestController 告诉spring 这是一个RestController 服务,用来注解类
@RequestMapping 指定当前方法,可以使用一个什么样的rest API来访问
@RequestMapping(value = "/hello")
使用/hello 来访问方法@RequestMapping(value = "/hello",method= RequestMethod.GET)
使用/hello 且是GET类型的方法才能访问到这个方法
@RequestParam 指定用户在请求当前方法时,请求中必须要有一个参数,
public String query(@RequestParam String username)
用户在请求中必须要有一个名为username 的参数public String query(UserQueryCondition condition)
Springboot 会自动组装用户的参数为一个对象,这个对象就是事先定义好的查询条件对象
参数相关注解
@PathVariable 将url中的一个片段映射到参数上
//id是用户的传参,使用了@PathVariable将用户请求中的参数映射到了参数上
@RequestMapping(value="/user/{id:\\d+}")//使用正则表达式约束用户输入的参数
@JsonView(User.DetailView.class)//用户在这个查询中可能需要密码字段,这个时候使用详细视图给用户展示密码
public User getInfo(@PathVariable String id){
User user = new User();
user.setUsername("tom");
return user;
}
@JsonView注解
public class User{
//在DTO对象中声明对象来实现显示不同的视图
public interface SimpleView{};
//继承了SimpleView视图,会显示所有的Simple View中的字段
public interface DetailView extends SimpleView{};
private String username;
private String password;
//在简单视图中显示
@JsonView(SimpleView.class)
public String getUsername(){
return this.username;
}
//在详细视图中显示
@JsonView(DetailView.class)
public String getPassword(){
return this.password;
}
}
@RestController
@RequestMapping("/user")//类下的所有方法在访问的时候,前面都要添加/user上下文
public class UserController{
@GetMapping//请求中带的参数全部都封装到方法参数中
@JsonView(User.SimpleView.class)//显示简略信息,不将用户密码返回给用户
public List<User> query(UserQueryCondition condition){
List<User> reuslt = Lists.newInstance();
result.add(new User());
result.add(new User());
result.add(new User());
return result;
}
@GetMapping("{id:\\d+}")//带一个Id参数,取url中的一个字段片段
@JsonView(User.DetailView.class)//显示详细信息,将用户的用户密码返回给用户
public User getInfo(String id){
User user = new User();
user.setUsername("tom");
return user;
}
//当用户使用POST方法对/user发请求的时候,此方法会去响应用户请求
@PostMapping
public User create(@RequestBody User user){//@RequestBody 将用户上传的Json参数绑定到Java方法参数,如果没有这个注解,Java方法将不能接受到这个请求的传参
User user = new User();
user.setId(1);
return user;
}
}
对日期的处理方法
后台存储日期的时候,可能会被多个客户端调用,手机,浏览器,还有一些其它的设备,不同的设备对日期的格式要求又是不一样的。这个时候如果在应用后台采用了一种固定格式的时间。那就会对各个设备不友好。所以前台和后台存储的时间应该是一种通用的格式。时间戳就是一种很好的方式.
值校验
public class User{
//在DTO对象中声明对象来实现显示不同的视图
public interface SimpleView{};
//继承了SimpleView视图,会显示所有的Simple View中的字段
public interface DetailView extends SimpleView{};
@NonBlank //用户名字段不能为空
private String username;
private String password;
//在简单视图中显示
@JsonView(SimpleView.class)
public String getUsername(){
return this.username;
}
//在详细视图中显示
@JsonView(DetailView.class)
public String getPassword(){
return this.password;
}
}
@PostMapping
@JsonView(SimpleView.class)
//@Valid注解和BindingResult类配合使用,如果用户上传的参数不正确,那么相关的错误信息都会被封装到BindingResult类中,
public User create(@Valid @RequestBody User user,BindingResult errors){
if(errors.hasError()){
//打印错误的具体信息
errors.getAllErrors().stream().forEach(error->System.out.println(error.getDefaultMessage()));
}
User user = new User();
user.setId(1);
return user;
}
Hibernate Validator
|
|
---|---|
@NotNull | 值不能为空 |
@Null | 值必须为空 |
@Pattern(regex) | 字符串必须匹配正则表达式 |
@Size(min=.max=) | 集合的数量必须在min和max之间 |
@CreditCardNumber(ignoreNonDigitCharacters=) | 字符串必须是信用卡号(按照美国标准校验) |
@Email | 字符串必须是Email地址 |
@Length(min=,max=) | 字符串的长度必须在min和max之间 |
@NotBlank | 字符串必须有字符 |
@notEmpty | 字符串不为null,集合必须有值 |
@Range(min=,max=) | 数字必须大于等于min,小于等于max |
@SafeHtml | 字符串是安全的Html代码 |
@URL | 字符串是合法的URL |
@AssertFalse | 值必须是False |
@AssertTrue | 值必须是True |
@DecimalMax(value=,inclusive=) | 值必须小于等于(inclusive=true)value属性指定的值,可注解字符串类型 |
@DecimalMix(value=,inclusive=) | 值必须大于等于(inclusive=true)value属性指定的值,可注解字符串类型 |
@Digits(integer=,fraction=) | 数字格式检查,integer指定整数部分,fraction指定小数部分 |
@Future | 值必须是个未来的日期 |
@Past | 值必须是个过去的日期 |
@Max(value=) | 值必须小于等于value指定的值,不可注解字符串 |
@Min(value=) | 值必须大于等于value指定的值,不可注解字符串 |
自定义注解实现校验
//定义一个注解
@Target({ElementType.METHOD,ElementType.FILED})
@Retention(RetentionPOlicy.RUNTIME)
@Constraint(validateBy = MyConstraintValidate.class)//java自带的校验注解,使用什么样的校验逻辑
public @interface MyConstraint{
}
//实现一个接口
public class MyConstraintValidate implements ConstraintValidator<MyConstraint,Object>{
public void initlize(MyConstraint constraintAnnotation){
}
//真正的校验逻辑
public boolean isValid(Object value ,ConstraintValidatorContext context){
return false;
}
}