Spring 3.2 Jackson2(400 Bad request)

时间:2013-03-20 18:54:54

标签: spring-mvc

我知道spring 3.2确实将一个json转换为一个带有RequestBody注释的对象列表。它不适合我。我可以使用常规的Jackson对象映射器来完成它。只是检查是否有人可以帮助我..下面是我的json和控制器方法

[{"uniqueJqGridId":"1","fileProcessingDate":"2012-09-24","createdTimeStamp":"1348569180191","csoCode":"A-A  ","cycleDate":"2012-09-24","accountDate":"2012-10-02","originName":"NCAA                     ","amount":"-95996.33","policyNumber":"C               ","transactionCode":"PCH","id":"1"}]

@RequestMapping(method = RequestMethod.POST, value = "/washTransactions", headers="Content-Type=application/json")  
public @ResponseBody RequestStatus washTransactions(@RequestBody List<ReconPolicy> policiesToWash)throws Exception{
    reconciliationService.applyWashToTransactions(policiesToWash,getCurrentUser());
    return new RequestStatus(true);
}

2 个答案:

答案 0 :(得分:1)

您正面临Java的Type Erasure问题。 Spring无法将确切的类类型传递给方法,因此它实际上得到了List<?> policiesToWash之类的内容。

解决方法是创建类似

的类
public class WashablePolishes extends ArrayList<ReconPolicy>

这样,spring将通过超级链保留类型。

或者您可以将方法更改为

public @ResponseBody RequestStatus washTransactions(@RequestBody ReconPolicy[] policiesToWash) throws Exception {...}

答案 1 :(得分:0)

感谢您回复Varun。从Spring 3.2开始,没有类型擦除问题。我在启用spring调试后发现了这个问题,我发现它在某些未知属性上失败了,我不得不用@JsonIgnoreProperties注释我的类。现在它有效。