Маршалинг JSON и универсальных шаблонов в Java с помощью Spring MVC

Я пытаюсь упорядочить объект JSON в класс-оболочку, который содержит универсальный объект, а также дополнительную информацию о подписи объекта.

public class Signable<T> {

    private T object;
    private String signature;

    public class Signable() {
       generateSignature();
    }

    /* Getters and setters  */
}

Класс-оболочка работает хорошо, если я конструирую его с уже созданным объектом, и он может генерировать желаемый json

@RequestMapping(value="/test/json/return",method=RequestMethod.GET)
public @ResponseBody Signable<Cart> getTest()
{
    Cart cart = new Cart();
    // populate cart with OrderItems ...
    Signable<Cart> sign = new Signable<Cart>();
    sign.setObject(cart);
    return sign;
}

, который может генерировать ожидаемый результат

{
   "object":{
        "orderItems":[
              {
                  "id": "****",
                  "desc": "asdlfj",
                  "price": 25.53
              }
        ]
   },
   "signature":"s9d94f9f9gdfg67d8678g6s87d6f7g6";
}

Это тот формат, который мне нужен. Однако при попытке маршалировать тот же json, сгенерированный из Signable, обратно в Signable, я получаю следующую ошибку:

java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to Cart

По какой-то причине он не может определить, что «объект» в json должен быть сопоставлен с типом Cart (это просто по умолчанию используется LinkedHashMap), хотя он указан в заголовке метода.

@RequestMapping(value="/test/json/post",method=RequestMethod.POST)
public @ResponseBody Signable<Cart> postTest(@RequestBody Signable<Cart> sign)

Есть ли способ явно указать, какие типы объектов вы хотите сгенерировать из JSON для вставки вместо универсального?

Любая помощь будет принята с благодарностью.

Спасибо.

11
задан Craig Kochis 21 July 2011 в 17:12
поделиться