SpringMVCメソッドのJSON応答を生成するためにカスタムJsonSerializerを使用しています。応答のフィールドの1つは列挙型です。列挙型の一部のプロパティも返すため、toString()の値を返すのではなく、その値のローカライズされた説明を返したいと思います。これは列挙型コードの一部です:
public enum BalanceType {
EXTERNAL_SOURCE(BalanceCurrency.EURO),
EXTERNAL_DESTINATION(BalanceCurrency.EURO),
MONEY_ACCOUNT(BalanceCurrency.EURO),
CREDIT_ACCOUNT(BalanceCurrency.CREDIT);
private BalanceCurrency currency;
private BalanceType(BalanceCurrency currency) {
this.currency = currency;
}
public BalanceCurrency getCurrency() {
return currency;
}
}
私はこのカスタムシリアライザーを使用しています:
public class BalanceTypeSerializer extends JsonSerializer<BalanceType> {
@Override
public void serialize(BalanceType balanceType, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
jsonGenerator.writeStartObject();
jsonGenerator.writeStringField("value", balanceType.toString());
jsonGenerator.writeStringField("currency", balanceType.getCurrency().toString());
jsonGenerator.writeEndObject();
}
}
これは、Spring MVCメソッドからの(リスト内の)戻り値として使用される(簡略化された)クラスです。
public class Balance {
private ObjectId id;
private ObjectId userId;
@JsonSerialize(using = BalanceTypeSerializer.class)
private BalanceType type;
private double balance;
private Date lastUpdated;
// getters and setters
}
そして、これはSpringMVCメソッド自体の簡略化されたコードです。
@RequestMapping(value = "api/balance", method = RequestMethod.GET)
@ResponseBody
public List<Balance> getBalanceJSON(@ModelAttribute("userId") ObjectId userId, Locale locale){
List<Balance> balanceList = balanceRepo.findByUserId(userId);
return balanceList;
}
このメソッドでは、Springによって提供されたロケールがありますが、このロケールをシリアライザーオブジェクトに渡すにはどうすればよいですか?また、MessageSourceAwareを実装して、シリアライザーのSpring "MessageSource"クラスにアクセスしたいのですが、このクラスはSpringによってインスタンス化されていないため、この方法では実行できず、注入もできません。 。お願いします、これを行うためのいくつかのヒント、またはより良い、より簡単なアプローチを教えてください。
前もって感謝します。