当前位置: 首页 > news >正文

小白初学SpringBoot记录

1.对于通过json返回用户信息时,需要忽略password字段操作:

1.1 pom配置jackson细节:

        

    <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.14.2</version></dependency>

在对应表的类加上注解(@JsonIgnoreProperties({"password"}))

@Data
@JsonIgnoreProperties({"password"})
public class User {private Integer id;//主键IDprivate String username; // 用户名//返回 的数据里忽略密码private String password;// 密码private String nickname; //昵称private String email;//邮箱private String userPic;// 用户头像private LocalDateTime createTime;// 创建时间private LocalDateTime updateTime;// 更新时间
}

返回数据的泛型类如下:
 

@NoArgsConstructor
@AllArgsConstructor
@Data
public class Result<T> {private Integer code;private String message;private T data;public static <E> Result success(E data){return new Result<>(0,"操作成功",data);}public static Result success(){return new Result<>(0,"操作成功",null);}public static  Result error(String message){return new Result<>(1,message,null);}
}

返回用户信息的路由信息:

   @GetMapping("/userinfo")public Result<User> getUserinfo(@RequestHeader(name="Authorization") String token){try {Map<String, Object> stringObjectMap = JwtUtils.parseToken(token);String name = (String)stringObjectMap.get("username");User byName = userService.findByName(name);return Result.success(byName);}catch (Exception e){return Result.error("Token 过期");}}

2.添加拦截器,对除了部分请求外的所有请求进行JWT验证:

 继承HandlerInterceptor接口,并且实现接口preHandle,

package org.example.Interceptors;import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.util.Enumeration;
import org.example.utils.JwtUtils;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;@Component
public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {String token = request.getHeader("Authorization");try {JwtUtils.parseToken(token);return true;}catch (Exception e){response.setStatus(401);return false;}}
}

注册拦截器的实现:其中(excludePathPatterns("/user/login","user/register") 操作会忽略这个请求路径下的JWT验证)

package org.example.config;import org.example.Interceptors.LoginInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class WebConfig implements WebMvcConfigurer {@Autowiredprivate LoginInterceptor loginInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(loginInterceptor).excludePathPatterns("/user/login","user/register");}
}

3.路由接口的参数校验使用validation

pom.xml 添加如下配置:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
</dependency>

对于对应的controller类添加如下注解:

@Validated
public class UserController {
。。。
}

3.1普通参数类型校验

对于登录接口参数的校验如下:

@PostMapping("/login")
public Result login(@Pattern(regexp = "^[a-zA-Z][a-zA-Z0-9]{4,16}$") String username,@Pattern(regexp = "^[a-zA-Z0-9]{5,16}$") String password){}

可以添加Pattern注解,并使用正则表达式验证。@Pattern(regexp = "^[a-zA-Z][a-zA-Z0-9]{4,16}$")

3.2对于类对象格式校验:

此方法存在controller类内
 

   @PutMapping("/update")public Result updateUserInfo(@RequestBody @Validated User user){}
@RequestBody 用户获取用户json格式传过来的参数,直接初始化类User。

User类如下:

@Data
@NoArgsConstructor
@JsonIgnoreProperties({"password"})
public class User {@NonNullprivate Integer id;//主键IDprivate String username; // 用户名//返回 的数据里忽略密码private String password;// 密码@NotEmpty@Pattern(regexp = "^[a-zA-Z0-9]{5,10}$")private String nickname; //昵称@NotEmpty@Emailprivate String email;//邮箱private String userPic;// 用户头像private LocalDateTime createTime;// 创建时间private LocalDateTime updateTime;// 更新时间
}

@Data注解是lombok依赖,可以在编译的时候帮助生成默认的getter,setter方法。

pom.xml添加如下:

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.32</version>
</dependency>

对于类对象的属性值校验使用的

@NonNull  不为null
@NotEmpty   不为null并且字符串时不为空
@Pattern(regexp = "^[a-zA-Z0-9]{5,10}$") 正则校验传入的别名
@Email 邮箱格式校验

在未添加 注解@NoArgsConstructor时,从postman模拟update时出现如下错误:
Cannot construct instance of `org.example.pojo.User` (although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator)

​原因:缺少无参构造器​
Jackson 反序列化时​​必须通过无参构造器创建对象​​,再通过 Setter 注入属性

  • 当前类使用 Lombok @Data 注解,但​​未显式添加 @NoArgsConstructor​,导致编译后无默认构造器
  • 即使 Lombok 默认生成无参构造器,若存在其他构造器(如全参构造器),则不再自动生成

因此需要加上@NoArgsConstructor注解。

相关文章:

  • Inno Setup 脚本中常用术语释义
  • 一站式直播工具:助力内容创作者高效开启直播新时代
  • SQL语法
  • RAMSUN分享全新超值型MM32F0050系列MCU
  • Java基础原理与面试高频考点
  • Python绘图库及图像类型之基础图表
  • 告别延迟,拥抱速度:存储加速仿真应用的解决方案【1】
  • Gateway 搭建
  • NLP常用工具包
  • FreeType 字体信息检查工具 - 现代C++实现
  • 信创认证通关攻略:从环境搭建到测试报告的全流程操作指南
  • Maskrcnn网络结构学习
  • ArcGIS Pro 3.4 二次开发 - 地图探索
  • Neo4j 认证与授权:原理、技术与最佳实践深度解析
  • GO语言---函数命名返回值
  • DrissionPage爬虫包实战分享
  • Ethernet IP转Modbus网关在热泵机组中的协议转换技术实现
  • Vue中的自定义事件
  • 自注意力,多头注意力,交叉注意力代码对比
  • Cisco Packet Tracer软件如何修改文件存储位置
  • 网站上做网上支付功能/宁波seo关键词排名优化
  • 衢州网站建设专业的公司/郑州百度seo排名公司
  • 描述建设一个网站的具体步骤/东莞网站推广排名
  • 做网站代理好吗/软文范例大全100字
  • 建筑工程 技术支持 东莞网站建设/自媒体是如何赚钱的
  • 动画形式的h5在哪个网站做/百度seo推广怎么收费