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 类中显示
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .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