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.
3 Réponses :
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) { ... }`
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.
À 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