Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

509
Views
@JsonView en Spring @GetMapping objetos de parámetro de consulta

En Spring, ¿es posible usar @JsonView en objetos de parámetros de consulta de URL? Puedo hacerlo para @RequestBody pero no tenemos cuerpos en las solicitudes GET. Esta pregunta es específicamente para los parámetros de consulta de URL que Spring ha convertido en objetos.

Por ejemplo, quiero tener un controlador con este mapeo:

 @GetMapping("/user") ResponseEntity<UserDTO> searchUser(@JsonView(value = UserView.Searchable.class) UserDTO userQuery) { //Do some work here using userQuery object for searching users return ResponseEntity.ok(); }

UserDTO :

 public class UserDTO { @JsonProperty("id") @JsonView(UserView.Private.class) private String id= null; @JsonView(UserView.Searchable.class) @JsonProperty("city") private String city = null; @JsonProperty("country") @JsonView(UserView.Searchable.class) private String country = null; @JsonProperty("state") private String state = null; @JsonProperty("zipCode") private String zipCode = null; //More properties and getter/setters...etc }

Entonces, si quisiera llamar al punto final, podría crear una URL como localhost:8080//api/user?country=Canada para buscar un usuario en Canadá, pero si probara localhost:8080//api/user?id=123 , la propiedad sería ignorada.

EDITAR: Podría haber apresurado esta idea. No hay deserialización JSON de los parámetros de URL porque no son JSON. Spring crea el objeto de consulta desde ServletModelAttributeMethodProcessor . Quizás si quiero un comportamiento personalizado, necesito implementar HandlerMethodArgumentResolver y hacerlo yo mismo.

EDITAR 2 Soy un poco nuevo en Spring, así que tengo mucho que aprender, pero creo que lo que haré es usar @InitBinder para incluir en la lista blanca los campos para enlazar

 @InitBinder public void setSearchableFields(WebDataBinder binder) { binder.setAllowedFields( "city", "country" ); }
over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

En uno de mis proyectos, he usado un POJO solo para los parámetros de consulta. Dudo que alguna propiedad sea ignorada por defecto en primavera, puede tener cheques nulos para ignorar.

QueryParams.java

 @Data public class QueryParams { Integer page; Integer pageSize; String sortBy; Sort.Direction direction; String searchId; String status; String symbol; public PageRequest getPageRequest(){ if(this.page==null){ this.page = 0; } if(this.pageSize==null){ this.pageSize = 25; } if(this.sortBy==null){ this.sortBy = "createdAt"; } if(this.direction ==null){ this.direction = Sort.Direction.DESC; } return PageRequest.of(this.page, this.pageSize, Sort.by(this.direction, this.sortBy)); } }

Y mi controlador:

 @GetMapping("currencies") public ResponseEntity<Page<CurrencyConfig>> getAllCurrencies(@Valid QueryParams queryParams) { try { return ResponseEntity.ok(orderbookService.getAllCurrencyConfig(queryParams)); } catch (HttpClientErrorException | HttpServerErrorException e) { throw new ResponseStatusException(e.getStatusCode(), e.getMessage()); } catch (Exception e) { e.printStackTrace(); throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, e.getLocalizedMessage()); } }
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!