• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
    • Preguntas
    • Profesores
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Pruebas Online
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

308
Vistas
Jackson: agregar sufijo según un tipo de campo

Aquí mi POJO :

 public class AutorDenormalized { private String id; private Long unitatId; private String grupId; private String descripcio; public AutorDenormalized() { } // getters $ setters }

Me gustaría serializar este tipo de objetos agregando un sufijo según el tipo de campo. Quiero decir,

  • Si el tipo de campo es una cadena -> entonces agregue un sufijo *_s
  • Si el tipo de campo es Largo -> entonces agregue un sufijo *_l
  • De lo contrario sigue adelante

¿Tienes alguna idea de cómo resolverlo?

about 3 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Debe implementar un BeanPropertyWriter personalizado que pueda generar un nombre de propiedad con un sufijo. Para registrar un BeanPropertyWriter personalizado, debe crear un BeanSerializerModifier personalizado.

El siguiente ejemplo muestra una implementación simplificada que muestra una forma de lograr el resultado anterior:

 import com.fasterxml.jackson.databind.BeanDescription; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationConfig; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.databind.ser.BeanPropertyWriter; import com.fasterxml.jackson.databind.ser.BeanSerializerModifier; import com.fasterxml.jackson.databind.util.NameTransformer; import java.io.IOException; import java.util.List; public class JsonTypeInfoApp { public static void main(String[] args) throws IOException { SimpleModule typeSuffixModule = new SimpleModule(); typeSuffixModule.setSerializerModifier(new TypeSuffixBeanSerializerModifier()); ObjectMapper mapper = new ObjectMapper(); mapper.enable(SerializationFeature.INDENT_OUTPUT); mapper.registerModule(typeSuffixModule); System.out.println(mapper.writeValueAsString(new AutorDenormalized())); } } class TypeSuffixBeanSerializerModifier extends BeanSerializerModifier { @Override public List<BeanPropertyWriter> changeProperties(SerializationConfig config, BeanDescription beanDesc, List<BeanPropertyWriter> beanProperties) { for (int i = 0; i < beanProperties.size(); ++i) { final BeanPropertyWriter writer = beanProperties.get(i); Class<?> rawType = writer.getType().getRawClass(); if (supports(rawType)) { final String suffix = constructSuffix(rawType); beanProperties.set(i, writer.rename(NameTransformer.simpleTransformer(null, suffix))); } } return beanProperties; } private String constructSuffix(Class<?> rawType) { return "_" + Character.toLowerCase(rawType.getSimpleName().charAt(0)); } private boolean supports(Class<?> rawClass) { return rawClass == String.class || rawClass == Long.class; } }

El código anterior imprime:

 { "id_s" : "1", "unitatId_l" : 123, "grupId_s" : "2", "descripcio_s" : "3" }

Ver también:

  • Serialización y deserialización personalizada de Jackson
about 3 years ago · Santiago Trujillo Denunciar

0

Aparte de la respuesta aceptada, que funciona bien, también podría considerar implementar PropertyNameStrategy : le permitiría cambiar el nombre de las propiedades y obtener el parámetro field, setter/getter, Creator (que necesita para encontrar el tipo de propiedad). Podría ser un poco menos de trabajo.

about 3 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 Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda