2015-05-03 4 views
0

У меня есть класс Java с языковой версией и BigDecimal. Я в настоящее время сериализации BigDecimal с аннотацией @Seralize:Код валюты в формате Jackson json

@JsonSerialize(using = MyCustomSeralizer.class) 

Моя задача состоит в том, что я хочу, чтобы добавить символ валюты на основе языка в классе с последовательным значением. Есть ли способ передать локаль в сериализатор? Или любые предложения о том, как лучше форматировать данные? Данные извлекаются с помощью Spring JDBC.

Спасибо.

ответ

1

SerializerProvider имеет метод под названием getLocale(). Он возвращает стандартную локаль (см. here), но на самом деле она получает информацию о локали от SerializationConfig, и вы можете настроить ее, чтобы получить желаемый язык с помощью with (см. here).

Редактировать: Я не совсем уверен, что ваш MyCustomSeralizer выглядит, но вы должны написать собственный сериалайзер как этот

public class MyCustomSerializer extends SerializerBase<ClassToBeSerialized> { 

    public MyCustomSerializer() { 
     super(ClassToBeSerialized.class); 
    } 

    @Override 
    public void serialize(ClassToBeSerialized yourClass, 
          JsonGenerator jsonGenerator, 
          SerializerProvider serializerProvider) throws IOException, JsonGenerationException { 
     jsonGenerator.writeStartObject(); 
     try { 
      jsonGenerator.writeFieldName("big (" + yourClass.getLocale().toString() + ")"); 
      jsonGenerator.writeString(getLocaleSpecificSerializedValue(yourClass.getBig(), yourClass.getLocale())); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
     jsonGenerator.writeEndObject(); 
    } 

    private String getLocaleSpecificSerializedValue(BigDecimal big, Locale locale) throws ParseException { 
     NumberFormat nf = NumberFormat.getInstance(locale); 
     return nf.parse(big.toString()).toString(); 
    } 
} 

Позже зарегистрировать его в объект картографа

ObjectMapper mapper = new ObjectMapper(); 
SimpleModule module = new SimpleModule("BigDecimalModule", new Version(0, 1, 0, "alpha")); 
module.addSerializer(ClassToBeSerialized.class, new MyCustomSerializer()); 
mapper.registerModule(module); 

Тейк посмотрите на Jackson How-To: Custom Serializers.

+0

У меня есть список MyClass. Я использую Spring MVC для сериализации списка для JSON. Каждый экземпляр MyClass в списке имеет BigDecimal и Locale. Я хочу сериализовать каждый BigDecimal на основе языка (который может быть различным для каждого экземпляра). Как настроить SerializationConfig для каждой строки? –

Смежные вопросы