我正在使用自定义 JsonSerializer 来生成 Spring MVC 方法的 JSON 响应。响应中的字段之一是枚举,我想返回其值的本地化描述,而不是返回 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
}
这是 Spring MVC 方法本身的简化代码:
@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实例化的,所以我不能这样做,我也不能注入它. 拜托,你能给出一些提示,或者更好、更简单的方法吗?
先感谢您。