鱼C论坛

 找回密码
 立即注册
查看: 170|回复: 3

[已解决]请问实体类里的校验注解不生效是什么原因

[复制链接]
发表于 2024-2-18 12:23:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请问实体类里的校验注解不生效是什么原因
/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
    @Email
    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>
最佳答案
2024-2-18 12:25:23
mumei2018 发表于 2024-02-18 12:25
【求助帖】请及时确认最佳答案,下次提问时可以得到更 ...


根据您提供的实体类代码,我看到您使用了Jakarta Bean Validation API中的注解来进行校验。校验注解不生效可能有以下原因:

1. 缺少校验依赖:请确保您的项目已经引入了Jakarta Bean Validation API的依赖。通常可以在pom.xml文件中添加以下依赖:

  1. <dependency>
  2.     <groupId>jakarta.validation</groupId>
  3.     <artifactId>jakarta.validation-api</artifactId>
  4.     <version>2.0.2</version>
  5. </dependency>
复制代码


2. 缺少校验实现:除了引入Bean Validation API的依赖外,还需要引入一个校验实现库,例如Hibernate Validator。您可以在pom.xml文件中添加以下依赖:

  1. <dependency>
  2.     <groupId>org.hibernate.validator</groupId>
  3.     <artifactId>hibernate-validator</artifactId>
  4.     <version>7.0.1.Final</version>
  5. </dependency>
复制代码


3. 未启用校验:请确保您的Spring Boot应用已经启用了校验功能。可以在配置文件(application.yml或application.properties)中添加以下配置:

  1. spring.mvc.validation.enabled=true
复制代码


4. 校验器未被触发:请检查在什么情况下校验器未被触发。例如,如果您在控制器方法参数上使用了@Validated注解,但是没有传递一个实体对象给校验器,则校验器将不会被触发。

请检查以上几个方面,如果问题仍然存在,请提供更多的代码和错误信息以供进一步分析。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-2-18 12:23:35 | 显示全部楼层
实体类中的校验注解不生效的原因可能有以下几种:

1. 未设置校验配置:为了使校验注解生效,需要在项目的配置文件中配置校验器。你可以在application.yml或application.properties文件中添加以下配置:

  1. # 开启校验
  2. spring.mvc.validation.enabled=true
复制代码


2. 未使用@Validated注解标记控制器类:在UserController类上添加@Validated注解,以便启用校验。

3. 未传递实体类对象给校验器:在UserController的相关接口方法中,要求使用@RequestBody注解将前端传递的JSON数据转换为User对象,并将User对象作为参数传递给方法。例如:

  1. @PostMapping("/register")
  2. public Result register(@Validated @RequestBody User user) {
  3.     // ...
  4. }
复制代码


4. 校验注解被应用在了错误的位置:校验注解应该被应用在实体类的字段上,而不是方法参数上。请检查User实体类中的注解是否正确放置在字段上。

请检查以上几个方面,如果问题仍然存在,请提供更多的代码和错误信息以供进一步分析。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-18 12:25:03 | 显示全部楼层
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
    @Email
    private String email;//邮箱
    private String userPic;//用户头像地址
    private LocalDateTime createTime;//创建时间
    private LocalDateTime updateTime;//更新时间
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-18 12:25:23 | 显示全部楼层    本楼为最佳答案   
mumei2018 发表于 2024-02-18 12:25
【求助帖】请及时确认最佳答案,下次提问时可以得到更 ...


根据您提供的实体类代码,我看到您使用了Jakarta Bean Validation API中的注解来进行校验。校验注解不生效可能有以下原因:

1. 缺少校验依赖:请确保您的项目已经引入了Jakarta Bean Validation API的依赖。通常可以在pom.xml文件中添加以下依赖:

  1. <dependency>
  2.     <groupId>jakarta.validation</groupId>
  3.     <artifactId>jakarta.validation-api</artifactId>
  4.     <version>2.0.2</version>
  5. </dependency>
复制代码


2. 缺少校验实现:除了引入Bean Validation API的依赖外,还需要引入一个校验实现库,例如Hibernate Validator。您可以在pom.xml文件中添加以下依赖:

  1. <dependency>
  2.     <groupId>org.hibernate.validator</groupId>
  3.     <artifactId>hibernate-validator</artifactId>
  4.     <version>7.0.1.Final</version>
  5. </dependency>
复制代码


3. 未启用校验:请确保您的Spring Boot应用已经启用了校验功能。可以在配置文件(application.yml或application.properties)中添加以下配置:

  1. spring.mvc.validation.enabled=true
复制代码


4. 校验器未被触发:请检查在什么情况下校验器未被触发。例如,如果您在控制器方法参数上使用了@Validated注解,但是没有传递一个实体对象给校验器,则校验器将不会被触发。

请检查以上几个方面,如果问题仍然存在,请提供更多的代码和错误信息以供进一步分析。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 02:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表