请问实体类里的校验注解不生效是什么原因
请问实体类里的校验注解不生效是什么原因/bigEventB/src/main/java/com/ms/bigEventB/pojo/User.java 路径下 实体类代码如下
package com.ms.bigEventB.pojo;
import java.time.LocalDateTime;
import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import lombok.Data;
@Data
public class User {
@NotNull
private Integer id;//主键ID
private String username;//用户名
@JsonIgnore
private String password;//密码
@NotEmpty
@Pattern(regexp = "^\\S{5,10}")
private String nickname;//昵称
@NotEmpty
private String email;//邮箱
private String userPic;//用户头像地址
private LocalDateTime createTime;//创建时间
private LocalDateTime updateTime;//更新时间
}
/bigEventB/src/main/java/com/ms/bigEventB/controller/UserController.java 路径下controller类代码如下
package com.ms.bigEventB.controller;
import java.util.HashMap;
import java.util.Map;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ms.bigEventB.pojo.Result;
import com.ms.bigEventB.pojo.User;
import com.ms.bigEventB.service.UserService;
import com.ms.bigEventB.util.JwtUtil;
import com.ms.bigEventB.util.Md5Util;
import com.ms.bigEventB.util.ThreadLocalUtil;
import jakarta.validation.constraints.Pattern;
@Validated
@Mapper
@RestController
@RequestMapping("user")
public class UserController {
@Autowired
private UserService userService;
@PostMapping("/register")
public Result register(@Pattern(regexp = "^\\S{5,16}$")String username, @Pattern(regexp = "^\\S{5,16}")String password) {
User u = userService.findByUserName(username);
if(u == null) {
userService.register(username, password);
return Result.success();
}else {
return Result.error("用户名已被占用");
}
}
// @PostMapping("/login")
// public Result<String> login(@Pattern(regexp = "^\\S{5,16}$")String username, @Pattern(regexp = "^\\S{5,16}")String password) {
// User loginUser = userService.findByUserName(username);
// if (loginUser == null) {
// return Result.error("用户名错误");
// }
//
// if (Md5Util.getMD5String(password) == loginUser.getPassword()) {
// return Result.success("jwt token");
// }
//
// return Result.error("密码错误");
//
//
// }
@PostMapping("/login")
public Result<String> login(@Pattern(regexp = "^\\S{5,16}$")String username, @Pattern(regexp = "^\\S{5,16}")String password){
User loginUser = userService.findByUserName(username);
if(loginUser == null) {
return Result.error("用户名错误");
}
if(Md5Util.getMD5String(password).equals(loginUser.getPassword())){
Map<String, Object> claims = new HashMap<>();
claims.put("id", loginUser.getId());
claims.put("username", loginUser.getUsername());
String token = JwtUtil.genToken(claims);
return Result.success(token);
}
return Result.error("密码错误");
}
@GetMapping("/userInfo")
public Result<User> userInfo(/*@RequestHeader(name="Authorization")String token*/){
// Map<String, Object> map = JwtUtil.parseToken(token);
// String username = (String) map.get("username");
Map<String, Object> map = ThreadLocalUtil.get();
String username = (String) map.get("username");
User user = userService.findByUserName(username);
return Result.success(user);
}
@PutMapping("/update")
public Result update(@RequestBody User user) {
userService.update(user);
return Result.success();
}
}
xml文件里的代码如下
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.2</version>
</parent>
<groupId>com.ms</groupId>
<artifactId>bigEventB</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>bigEventB</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>4.4.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<!-- Spring Boot Data JPA -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- H2 Database -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
<!-- Jackson Databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<!-- JUnit 5 -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project> 实体类中的校验注解不生效的原因可能有以下几种:
1. 未设置校验配置:为了使校验注解生效,需要在项目的配置文件中配置校验器。你可以在application.yml或application.properties文件中添加以下配置:
# 开启校验
spring.mvc.validation.enabled=true
2. 未使用@Validated注解标记控制器类:在UserController类上添加@Validated注解,以便启用校验。
3. 未传递实体类对象给校验器:在UserController的相关接口方法中,要求使用@RequestBody注解将前端传递的JSON数据转换为User对象,并将User对象作为参数传递给方法。例如:
@PostMapping("/register")
public Result register(@Validated @RequestBody User user) {
// ...
}
4. 校验注解被应用在了错误的位置:校验注解应该被应用在实体类的字段上,而不是方法参数上。请检查User实体类中的注解是否正确放置在字段上。
请检查以上几个方面,如果问题仍然存在,请提供更多的代码和错误信息以供进一步分析。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-2-18 12:23
实体类中的校验注解不生效的原因可能有以下几种:
1. 未设置校验配置:为了使校验注解生效,需要在项目 ...
【求助帖】请及时确认最佳答案,下次提问时可以得到更多关注,问题可以更快解决
请问实体类里的校验注解不生效是什么原因
/bigEventB/src/main/java/com/ms/bigEventB/pojo/User.java 路径下 实体类代码如下
package com.ms.bigEventB.pojo;
import java.time.LocalDateTime;
import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import lombok.Data;
@Data
public class User {
@NotNull
private Integer id;//主键ID
private String username;//用户名
@JsonIgnore
private String password;//密码
@NotEmpty
@Pattern(regexp = "^\\S{5,10}")
private String nickname;//昵称
@NotEmpty
private String email;//邮箱
private String userPic;//用户头像地址
private LocalDateTime createTime;//创建时间
private LocalDateTime updateTime;//更新时间
} mumei2018 发表于 2024-02-18 12:25
【求助帖】请及时确认最佳答案,下次提问时可以得到更 ...
根据您提供的实体类代码,我看到您使用了Jakarta Bean Validation API中的注解来进行校验。校验注解不生效可能有以下原因:
1. 缺少校验依赖:请确保您的项目已经引入了Jakarta Bean Validation API的依赖。通常可以在pom.xml文件中添加以下依赖:
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
<version>2.0.2</version>
</dependency>
2. 缺少校验实现:除了引入Bean Validation API的依赖外,还需要引入一个校验实现库,例如Hibernate Validator。您可以在pom.xml文件中添加以下依赖:
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>7.0.1.Final</version>
</dependency>
3. 未启用校验:请确保您的Spring Boot应用已经启用了校验功能。可以在配置文件(application.yml或application.properties)中添加以下配置:
spring.mvc.validation.enabled=true
4. 校验器未被触发:请检查在什么情况下校验器未被触发。例如,如果您在控制器方法参数上使用了@Validated注解,但是没有传递一个实体对象给校验器,则校验器将不会被触发。
请检查以上几个方面,如果问题仍然存在,请提供更多的代码和错误信息以供进一步分析。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]