首页 > 其他分享 >springboot中,各部分的作用

springboot中,各部分的作用

时间:2024-02-19 10:23:29浏览次数:19  
标签:springboot 自定义 校验 num 参数 testService 部分 public 作用

一个优秀的Controller层逻辑,它的定位,我认为是「不可或缺的配角

 

说它是配角是因为 Controller 层的代码一般是不负责具体的逻辑业务逻辑实现,但是它负责接收和响应请求

 

Controller 主要的工作有以下几项

    • 接收请求并解析参数
    • 调用 Service 执行具体的业务代码(可能包含参数校验)
    • 捕获业务逻辑异常做出反馈
    • 业务逻辑执行成功做出响应

 

要求:

1、统一返回结构:已完成,使用AResult

2、统一异常处理:已完成,自定义异常

3、参数校验

参数校验

@PathVariable 和 @RequestParam 参数校验

Get 请求的参数接收一般依赖这两个注解,但是处于 url 有长度限制和代码的可维护性,超过 5 个参数尽量用实体来传参
对 @PathVariable 和 @RequestParam 参数进行校验需要在入参声明约束的注解
如果校验失败,会抛出 MethodArgumentNotValidException 异常

@RestController(value = "prettyTestController")
@RequestMapping("/pretty")
@Validated
public class TestController {

    private TestService testService;

    @GetMapping("/{num}")
    public Integer detail(@PathVariable("num") @Min(1) @Max(20) Integer num) {
        return num * num;
    }

    @GetMapping("/getByEmail")
    public TestDTO getByAccount(@RequestParam @NotBlank @Email String email) {
        TestDTO testDTO = new TestDTO();
        testDTO.setEmail(email);
        return testDTO;
    }

    @Autowired
    public void setTestService(TestService prettyTestService) {
        this.testService = prettyTestService;
    }
}

@RequestBody 参数校验

Post、Put 请求的参数推荐使用 @RequestBody 请求体参数
对 @RequestBody 参数进行校验需要在 DTO 对象中加入校验条件后,再搭配 @Validated 即可完成自动校验
如果校验失败,会抛出 ConstraintViolationException 异常

//DTO
@Data
public class TestDTO {
    @NotBlank
    private String userName;

    @NotBlank
    @Length(min = 6, max = 20)
    private String password;

    @NotNull
    @Email
    private String email;
}
//Controller
@RestController(value = "prettyTestController")
@RequestMapping("/pretty")
public class TestController {

    private TestService testService;

    @PostMapping("/test-validation")
    public void testValidation(@RequestBody @Validated TestDTO testDTO) {
        this.testService.save(testDTO);
    }

    @Autowired
    public void setTestService(TestService testService) {
        this.testService = testService;
    }
}

自定义校验规则
有些时候 JSR303 标准中提供的校验规则不满足复杂的业务需求,也可以自定义校验规则
自定义校验规则需要做两件事情

    • 自定义注解类,定义错误信息和一些其他需要的内容
    • 注解校验器,定义判定规则

自动校验参数真的是一项非常必要、非常有意义的工作。JSR303 提供了丰富的参数校验规则,再加上复杂业务的自定义校验规则,完全把参数校验和业务逻辑解耦开,代码更加简洁,符合单一职责原则。

 

来源:

https://mp.weixin.qq.com/s/txTYWQH0sxGkHSxfqJYQZg

 

标签:springboot,自定义,校验,num,参数,testService,部分,public,作用
From: https://www.cnblogs.com/xin880/p/18020518

相关文章

  • UVM Primer OOP前置部分(Chapter 4-5)
    资料:-UVMPrimer(英文原版)-UVMPrimer(中译版)前言:-本部分将包括UVMPrimer的第4章-第9章,仅整理OOP特性,不会涉及DUT及验证平台构建的相关内容。正文:本书的4-9章以一个动物园为例,讲述了OOP的不同特性,包括:-类-继承-多态-静态变量和方法-factory模式第四章:OOP概述OOP的优点......
  • Spring/SpringBoot 拦截器
    Spring/SpringBoot拦截器拦截器的作用:拦截器,可以进行请求过滤、权限管理、打印日志、数据校验等。拦截器,可以在请求前、请求后进行处理。代码示例:拦截器MyInterceptor:Spring的拦截器,需要实现HandlerInterceptor接口。publicclassMyInterceptorimplementsHandler......
  • SQL批量更新部分B表的数据,数值来源于A表,根据AB关联字段作为过滤条件
    1.需求描述A表是全数据表,需要批量更新B表制定列的部分数据。条件是B表的另外一列定于A表的另外一列2.实例代码updateBsetcol1=A.col1fromAwhereB.col2=A.col2andb.col2>'2024-01-11';3.代码说明where后面第一份条件是两表的关联关系,第二个条件是对B表更......
  • POLIR-Economics-Microeconomics: 经济模型{静态分析+比较静态分析+动态分析}}@<<西方
    经济理论经济理论是在对现实的经济事物的主要特征和内在联系进行概括和抽象的基础上,对现实的经济事务进行的系统描述;西方经济学家认为由于现实的经济事务是错综复杂的,所以在研究每一个经济事物时,往往要舍弃一些非基本的因素,只就经济事物的基本因素及其相互之间的......
  • Java21 + SpringBoot3使用Spring Security时如何在子线程中获取到认证信息
    目录前言原因分析解决方案方案1:手动设置线程中的认证信息方案2:使用DelegatingSecurityContextRunnable创建线程方案3:修改SpringSecurity安全策略通过设置JVM参数修改安全策略通过SecurityContextHolder修改安全策略总结前言近日心血来潮想做一个开源项目,目标是做一款可以适配多......
  • 在k8S中,QoS作用是什么?
    在Kubernetes(k8s)中,QoS(QualityofService,服务质量)是一种资源管理策略,它通过评估Pod对CPU和内存资源的需求与限制来决定在资源紧张时如何优先分配资源。QoS确保集群在面临资源竞争时能够公平地处理不同类型的Pod,并尽可能维持系统的稳定性和响应性。Kubernetes根据Pod的资源配置将......
  • 在k8S中,flannel和calico的作用和区别是什么?
    在Kubernetes(k8s)中,Flannel和Calico都是用于提供容器网络解决方案的CNI(ContainerNetworkInterface)插件,它们的主要作用是为集群中的Pod提供跨主机之间的网络通信能力。以下是两者的基本作用和主要区别:Flannel:作用:Flannel设计简洁且易于部署,主要用于实现集群内Pod间的IP地址空间......
  • 机器视觉在缺陷检测中的关键作用:提升检测精度与效率
    机器视觉在缺陷检测中起着至关重要的作用,它通过图像处理和模式识别技术,实现了对产品质量的自动、高效和精确检测。以下是机器视觉在缺陷检测中的关键作用:提升检测精度:机器视觉系统可以对产品进行高精度的检测,能够发现微小的缺陷。通过深度学习和人工智能的融合,机器视觉技术能够......
  • 0217-0224校赛部分题解
    SMUWinter2024Round#3(Div.2)对于自己比较有价值的题目是D题https://codeforces.com/gym/102897/problem/D?mobile=trueJ题https://codeforces.com/gym/102897/problem/JK题https://codeforces.com/gym/102897/problem/KE题https://codeforces.com/gym/102897/prob......
  • 阿克曼函数(Ackermann function)部分推导
    相关题目已知\(Ackermannfunction\)为Ack(m,n)={n+1__m=0;Ack(m-1,1)__m>0&&n=0;Ack(m-1,Ack(m,n-1)__m>0&&n>0.}当\(m=1\)时有\(Ack(1,n)\)\(=Ack(0,Ack(1,n-1))=Ack(1,n-1)+1;\)\(=Ack(0,Ack(1,n-2))+1=Ack(1,n-2)+2;\)\(=···\)......