@Допустимая аннотация не работает в классе Dto — весенняя загрузка

#spring-boot #hibernate #validation #annotations

#весенняя загрузка #спящий режим #проверка #аннотации

Вопрос:

Я хочу проверить свой CustomerDTO с помощью @Valid annotation.но также одновременно проверяется с помощью @Valid annotation, но это не работает, пожалуйста, помогите мне.

Это мой контроллер:

     import lk.navishka.loginWithSecuruty.dto.CustomerDto;
    import lk.navishka.loginWithSecuruty.entity.Customer;
    import lk.navishka.loginWithSecuruty.service.CustomerService;
    import lk.navishka.loginWithSecuruty.util.StandradResponse;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.http.HttpStatus;
    import org.springframework.http.MediaType;
    import org.springframework.http.ResponseEntity;
    import org.springframework.web.bind.annotation.*;
    
    import javax.validation.Valid;
    
    @RestController
    @CrossOrigin
    public class CustomerController {
    
        @Autowired
        CustomerService customerService;
    
        @RequestMapping(value = {"/register"})
        public ResponseEntity saveCustomer(@Valid @RequestBody CustomerDto customer){
            customerService.saveCustomer(customer);
            StandradResponse success = new StandradResponse(200, "success", null);
            return new ResponseEntity(success, HttpStatus.OK);
        }
    }
 

это мой класс CustomerDTO

 import lombok.*;

import javax.persistence.Column;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.ArrayList;

@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@ToString
public class CustomerDto {

    @NotNull
    @Size(min = 9, message = "Nic have at least 9 characters ")
    private String nic;
    private String address;
    @NotNull
    @Size(min = 5, message = "FirstName have at least 5 characters ")
    private String firstName;
    @NotNull
    @Size(min = 5, message = "LastName have at least 5 characters ")
    private  String lastName;
    private ArrayList<UserDto> user = new ArrayList<>();
}
 

это мой класс ErrorDetails

 import java.util.Date;

public class ErrorDetails {
    private Date timestamp;
    private String message;
    private String details;

    public ErrorDetails(Date timestamp, String message, String details) {
        super();
        this.timestamp = timestamp;
        this.message = message;
        this.details = details;
    }

    public Date getTimestamp() {
        return timestamp;
    }
    public void setTimestamp(Date timestamp) {
        this.timestamp = timestamp;
    }
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
    public String getDetails() {
        return details;
    }
    public void setDetails(String details) {
        this.details = details;
    }
}
 

this my ExceptionHandler class

 import lk.navishka.loginWithSecuruty.util.ErrorDetails;
import lk.navishka.loginWithSecuruty.util.StandradResponse;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

import java.util.Date;

@ControllerAdvice
public class ExceptionHandler {

    //handling custom validation error

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseEntity<?> customValidationErrorHandling(MethodArgumentNotValidException exception){
        ErrorDetails errorDetails = new ErrorDetails(new Date(),"Validator Error", exception.getBindingResult().getFieldError().getDefaultMessage());
        return new ResponseEntity<>(errorDetails, HttpStatus.BAD_REQUEST);
    }
}
 

i use meven this is Pom.xml file

 <?xml version="1.0" encoding="UTF-8"?>
<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>

    <groupId>lk.navishka</groupId>
    <artifactId>LoginWithSecuruty</artifactId>
    <version>1.0.0</version>

    <packaging>jar</packaging>

    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.4.2</version>
    </parent>

    <dependencies>


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


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.4.2</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <version>2.4.2</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.23</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-test -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>2.4.2</version>
            <scope>test</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.18</version>
            <scope>provided</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.modelmapper/modelmapper -->
        <dependency>
            <groupId>org.modelmapper</groupId>
            <artifactId>modelmapper</artifactId>
            <version>2.3.9</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>2.0.1.Final</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-validator -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>7.0.1.Final</version>
        </dependency>


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

        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.9.1</version>
        </dependency>

        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.3.1</version>
        </dependency>


    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
 

Это значение JSON, которое я использую с postman

 {

  "nic" : "656v",
  "address" : "polpitiya",
  "firstName" : "nn",
  "lastName" : "",

  "user": [{

    "userName":"username1",
    "email":"sample@gmail.com",
    "password":"1234"
   
  }]

}
 

Комментарии:

1. Вы используете hibernate-validator версию 7, которая не поддерживается, поскольку в ней используется jakarta.validation, а не javax.validation. Удалите обе validation-api hibernate-validator зависимости и и добавьте вместо этого «spring-boot-starter-validation». Другой совет, вы уже используете spring-boot-starter-parent so, удалите версии из spring-boot-starter-* зависимостей в разделе зависимостей. Это избавит вас от множества головных болей при обновлении.

2. вау, это really work для меня .. спасибо за вашу помощь и советы

Ответ №1:

Попробуйте 6.2.0.final версию hibernate-validator, она будет работать.

 <dependency>
        <groupId>org.hibernate.validator</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>6.2.0.Final</version>
</dependency>