Pas en mesure de valider le corps de demande en démarrage ressort avec @Valid

ASP008:

Je veux valider mon corps de la demande avec l' @Validannotation, mais il ne fonctionne pas au printemps Boot

J'ai une classe de demande dans le fichier JAR que je ne peux pas modifier avec deux champs. Un champ est de type objet. Ma classe contrôleur accepte cet objet de classe en tant que corps de la demande. Quand je passe mon ci-dessous JSON au contrôleur, la validation ne fonctionne pas. Voici des exemples de code.

Demande de classe:

public class Request {

    Object data;
    Map<String, Object> meta;

    public <T> T getData() throws ClassCastException {
        return (T) this.data;
    }
}

Une autre classe:

public class StudentSignUpRequest {

     @NotNull(message = "First Name should not be empty")
     @Size(max = 64, message = "FirstName should not exceed 64 characters")
     private String firstName;

     @NotNull(message = "Last Name should not be empty")
     @Size(max = 64, message = "LastName should not exceed 64 characters")
     private String lastName;

     @NotNull(message = "Email cannot be empty")
     @Size(max = 50, message = "Email cannot exceed 50 characters")
     @Pattern(regexp = EMAIL_REGEX_PATTERN, message = "Email should contain a valid email address.")
     private String email;

     // other fields
}

Classe contrôleur:

@PostMapping(value = Constants.STUDENT_SIGN_UP)
public Response signUpStudent(@Valid @RequestBody Request request, HttpServletRequest servletRequest) {

    // retrieving the actual resource from request payload
    StudentSignUpRequest signUpRequest = request.getData(StudentSignUpRequest.class);
    // call service to sign-up student
    return loginRegistrationService.signUpStudent(signUpRequest);
}

L'appel des jeux de codes demande comme ci-dessous:

StudentSignUpRequest studentSignUpRequest = new StudentSignUpRequest();
//setter methods

Request payload = new Request();
payload.setData(studentSignUpRequest);

Ceci est la demande que je vous envoie:

Pour plus de 64 caractères pour prenom:

JSON Exemple:

{
    "data": {
        "firstName": "student111111111111111111111111111111111111111111111111111111111111",
        "lastName": "somesurname",
        "email": "[email protected]"
    }
}

Où le prénom non inclus:

{
    "data": {
        "lastName": "somesurname",
        "email": "[email protected]"
    }
}

Ici , à la fois @Size, ainsi que l' @NotNullannotation ne fonctionne pas.

Toute solution?

buræquete:

La validation aurait travaillé si la Requestclasse était comme;

public class Request {

    @Valid
    StudentSignUpRequest data;

    // other stuff
}

Le fait que vous avez pas de type de classe pour le datarend impossible pour la validation à appliquer sur elle, sans tenir compte du fait qu'il n'y a même pas une @Validannotation sur le terrain. L' @Validannotation est utilisée pour propager la cascade de validation.

Mais puisque vous ne pouvez pas modifier l' Requestobjet, nous allons continuer avec une autre façon de validation de la poignée sans le faire manuellement.


Une autre façon est à la validation de déclenchement après que vous obtenez le StudentSignUpRequestd' requestobjet;

StudentSignUpRequest signUpRequest = request.getData(StudentSignUpRequest.class);
loginRegistrationService.signUpStudent(signUpRequest) // validation will trigger with this call

Ce que vous pouvez faire est la suivante;

@Service
@Validated
public class LoginRegistrationService {

    public void signUpStudent(@Valid StudentSignUpRequest signUpRequest) {
        // some logic
    }
}

avec l' @Validatedannotation, vous activez la vérification de validation pour toutes les @Validargs annotés dans les publicméthodes de cette classe.

Peut être utilisé avec la validation de niveau de procédé, ce qui indique qu'une classe spécifique est censé être validé au niveau du procédé (agissant comme un point d'action de l'intercepteur de validation correspondant)

Cela peut être coûteux puisque vous voudriez obtenir une violation de contrainte le plus rapidement possible sans faire des travaux coûteux pour une demande déjà condamné.

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=229781&siteId=1
conseillé
Classement