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

409
Views
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?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

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
over 4 years ago · Santiago Trujillo Report

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.

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!