Java @JsonSerialize/@JsonDeserialize未使用Spring MVC调用

Java @JsonSerialize/@JsonDeserialize未使用Spring MVC调用,java,spring,spring-mvc,jackson,Java,Spring,Spring Mvc,Jackson,我有一个Spring 3.1 MVC项目,在反序列化发送到以下控制器方法的请求时遇到问题: @RequestMapping(value="/deposit",method=RequestMethod.POST) public void deposit(@RequestBody DepositRequest request) { } 包含Joda货币值的请求对象,我已为其注册了自定义序列化程序/反序列化程序: public class DepositRequest { private M

我有一个Spring 3.1 MVC项目,在反序列化发送到以下控制器方法的请求时遇到问题:

@RequestMapping(value="/deposit",method=RequestMethod.POST)
public void deposit(@RequestBody DepositRequest request)
{
}
包含Joda货币值的请求对象,我已为其注册了自定义序列化程序/反序列化程序:

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);
    }
}
我是否需要以某种方式告诉Spring这个映射器,或者注释就足够了?
我应该采取哪些其他步骤来实现反序列化?

根据,您应该在setter而不是getter上使用该注释(而
JsonSerialize
确实应该在getter上)。

您还可以将反序列化器/序列化器附加到amount字段:


还必须配置反序列化器类吗?我正在尝试与joda time相同的操作。如果您按照中的指定将
指定为=JodaMoney.class
属性,您是否理解为什么不使用
JodaMoneyDeserializer
?我只能在使用
using=
时运行它,但没有其他属性。@JJD我以前没有使用过“as”注释。但如果我理解正确,“AS”表示反序列化为您在注释中提供的类型,“USING”表示使用注释中指定的类反序列化为声明的类型。是的,它在某种程度上符合文档所说的:“如果还使用USING(),则它具有优先级[…],并且忽略此注释属性的值”。尽管如此,我无法确认是否忽略了
as=
——当我同时指定两者时,它对我根本不起作用。
{
    "amount" : "30AUD"
}
@JsonDeserialize(using=JodaMoneyDeserializer.class)
@JsonSerialize(using=JodaMoneySerializer.class)
private Money amount;

public Money getAmount() {
    return amount;
}

public void setAmount(Money amount) {
    this.amount = amount;
}