Я пытаюсь маршалировать объект 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, чтобы вставить вместо универсального?
Любая помощь будет принята с благодарностью.
Спасибо.