1
votes

message de validation personnalisé de démarrage à ressort non affiché

J'ai un point de terminaison qui accepte les paramètres de requête liés à une classe GetParams:

@GetMapping(value = "/applications")
public ResponseEntity<Data> getApplications( @Validated GetParams parameters) { ... }

C'est le point final de mon contrôleur:

public class GetParams{
    @Min(value = 0, message = "OFFSET_INVALID")
    private Integer offset;

    @Min(value = 0, message = "LIMIT_INVALID")
    private int limit;

    public GetParams() {
        this.offset = 0;
        this.limit = 100;
    }

    public int getOffset() {
        return offset;
    }

    public int getLimit() {
        return limit;
    }

    public void setOffset(int offset) {
        this.offset = offset;
    }

    public void setLimit(int limit) {
        this.limit = limit;
    }

}

Lorsque j'envoie une requête GET qui enfreint l'une des contraintes, par exemple:

GET /applications?offset=-20&limit=100

Le framework renvoie un 400, mais sans mes messages, et en fait sans corps de réponse et sans trace de pile imprimée dans la console! Lorsque les paramètres de requête sont valides, le résultat l'est également. Pourquoi est-ce?

Merci.


0 commentaires

3 Réponses :


0
votes

Les paramètres de requête doivent être mappés à l'aide de @RequestParam .

Essayer

@GetMapping(value = "/applications")
public ResponseEntity<Data> getApplications( @Validated @ReqeustParam @Min(value = 0, message = "OFFSET_INVALID") Integer offset) { ... }`


0 commentaires

1
votes

Pour une requête GET vous ne pouvez pas valider la liaison request-params avec un objet comme vous l'avez fait ci-dessus. Vous devez valider chaque paramètre séparément comme ceci:

public ResponseEntity<Data> getApplications(@RequestParam @Min(1) @Max(value=7, message="you custom message") Integer offset,  @RequestParam @Min(3) Integer params2, ... )
{
        //your code/logic
}

Vous ne pouvez valider de cette manière que pour POST et d'autres requêtes avec @RequestBody qui ont un corps dans leurs requêtes.


0 commentaires

0
votes

À partir du chemin racine, vous pouvez définir «inclure les erreurs de liaison» dans « resources / application.properties » sur «toujours». Il en va de même pour le «message».

server.error.include-message=always
server.error.include-binding-errors=always


0 commentaires