我有一个 Spring 3.1 MVC 项目,但在反序列化发送到以下 Controller 方法的请求时遇到问题:
@RequestMapping(value="/deposit",method=RequestMethod.POST)
public void deposit(@RequestBody DepositRequest request)
{
}
包含 Joda Money 值的请求对象,我已经为它注册了一个自定义序列化器/反序列化器:
public class DepositRequest {
private Money amount;
@JsonDeserialize(using=JodaMoneyDeserializer.class)
@JsonSerialize(using=JodaMoneySerializer.class)
public Money getAmount() {
return amount;
}
public void setAmount(Money amount) {
this.amount = amount;
}
}
还有反序列化器:
public class JodaMoneyDeserializer extends JsonDeserializer<Money> {
@Override
public Money deserialize(JsonParser parser, DeserializationContext context)
throws IOException, JsonProcessingException {
String text = parser.getText();
return Money.parse(text);
}
}
但是,这个反序列化器永远不会被调用。当我发送以下 JSON 时,我收到 400 - Bad Request
响应,我认为这表明未找到映射器。
{
"amount" : "30AUD"
}
我是否需要以某种方式告诉 Spring 这个映射器,或者注释是否足够? 我应该采取哪些其他步骤才能使反序列化工作?
最佳答案
根据Javadoc of JsonDeserialize
您应该在 setter 上使用该注释,而不是在 getter 上(而 JsonSerialize
确实应该在 getter 上)。
关于java - @JsonSerialize/@JsonDeserialize 未使用 Spring MVC 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9025912/