Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

764
Vistas
Cómo mapear @RequestBody a Java Object implementando Builder Pattern

Estoy usando un objeto de dominio importado de otro servicio que implementa un patrón de construcción y, por lo tanto, no tiene constructor ni configuradores sin argumentos. Quiero asignar JSON procedente de @RequestBody a este objeto de dominio. Sé que puedo anotarlo con @JSONPojoBuilder y algunos otros, pero no tengo control sobre eso. Así que estoy atascado escribiendo mi propio mapeador de JSON a objetos, lo que no creo que sea una buena idea, ya que implica validaciones, etc. y está estrechamente relacionado con el cuerpo de la solicitud.

Código -

 @RequestMapping(value = "someurl", method = RequestMethod.POST) public ResponseEntity<ObjectA> addObject(@PathVariable String id, @RequestBody @NonNull String body) { ObjectA obj = service.addObject(id, mapper.mapJSONToObject(body)); return new ResponseEntity<>(obj , HttpStatus.CREATED); }

En lugar de escribir mi propio mapeador, escuché que podemos usar algún convertidor de mensajes y pasar nuestra clase Builder como argumento. No encontré tales ejemplos, si alguien lo ha hecho antes o puede indicarme algún sitio, sería útil.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Nunca lo probé, pero en general, Spring MVC admite la abstracción de "Convertidores personalizados" que puede escribir para ayudar a Spring a convertir JSON en objetos complicados.

Supongo que tiene un MyComplicatedClass sin constructor sin operaciones pero con un constructor. Así que puedes hacer lo siguiente:

 import org.springframework.core.convert.converter.Converter; @Component // note the converter is also a spring bean so you can, say, inject object mapper and convert to JsonNode-s for example (see below) public class MyComplicatedClassConverter implements Converter<String, MyComplicatedClass> { @Autowired // or use constructor injection private ObjectMapper objectMapper; /** * Override the convert method * @param object in a string representation to be converted * @return */ @Override public MyComplicatedClass convert(String object) { JsonNode node= objectMapper.readTree(/*byte array input stream from object string or something */); return MyComplicatedClass.builder() .withSomeProperty(node.get("someProperty").textValue() .withAnotherProperty(node.get("anotherProperty").intValue() .build(); } }

Ahora, cuando su aplicación reconoce este convertidor, permite usar MyComplicatedClass en los métodos del controlador como si Spring supiera cómo convertirlo. Entonces, el fragmento de código que ha presentado en su ejemplo debería funcionar.

Todo esto se hace sin "tocar" el código de MyComplicatedClass .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda