SpringSecurity 框架学习 3(MVC 开发RESTfulAPI 常用注解)

MVC 开发RESTfulAPI 接口
传统模式:
  传统的查询,修改,删除都是GET或者POST
  参数以queryString 方式 a=1&b=2 等..
RESTfulAPI中:
  用URL描述资源
  用HTTP方法描述行为(GET查询详情/POST创建/PUT修改/DELETE删除),使用HTTP状态码来表示不同的结果.
  参数JSON方式交互
  RESTfulAPI 只是风格,不是强制标准

常用注解:
  @RestController: 标记Controller提供RESTAPI
  @RequestMapping(value = "/user", method = RequestMethod.GET) 标记http请求到具体方法
  @PostMapping
  @GetMapping
  @RequestParam 参数映射
  @PageableDefault(page = 2, size = 17, sort = "username,asc") 指定分页默认参数
  @PathVariable : 映射路由参数/xx/${id}
  @JsonView 根据指定的方式显示数据,自定义显示
    使用接口声明多个视图

    在属性的get方法上指定视图,只有添加的才会再返回的数据中

 

    在Controller的方法上指定视图

 

 


  @RequestBody 解析映射传入的参数JSON字符串
  @Valid 校验属性合法性 , 需要和BindingResult 类配合使用
    属性常用的验证注解..

  

 

 

 


  自定义验证注解:   

        

    第一步创建注解类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.imooc.validator;
 
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@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 { };
}

 

    第二步创建具体实现类(验证逻辑)继承ConstraintValidator<注解类, 属性的类型Object>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package com.imooc.validator;
 
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
 
import org.springframework.beans.factory.annotation.Autowired;
 
import com.imooc.service.HelloService;
 
/**
 * 具体执行逻辑的类
 * MyConstraint 标记的注解类
 */
public class MyConstraintValidator implements ConstraintValidator<MyConstraint, Object> {
 
    @Autowired
    private HelloService helloService;
 
    @Override
    public void initialize(MyConstraint constraintAnnotation) {
        System.out.println("my validator init");
    }
 
    /**
     * 具体的逻辑
     * @param value
     * @param context
     * @return
     */
    @Override
    public boolean isValid(Object value, ConstraintValidatorContext context) {
        helloService.greeting("tom");
        System.out.println(value);
        return true;
    }
 
}

  第三步 在BindingResult 类中显示

 

posted @   qukaige  阅读(116)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
历史上的今天:
2018-11-27 tmux
点击右上角即可分享
微信分享提示