我该如何处理后台转换json为对应的泛型实体类,而不是JSONObject?

魏晋秋 发布于 2017/03/15 14:24
阅读 731
收藏 0

我想创建一个RESTfulController,定义通用的增删改查,然后子类继承后就可不必写重复的代码。

当后台接受json,由fastjson转换为对应的对象时,最终得到的是 JSONObject ,而不是对应的实体类,错误如下:

[500][Request processing failed; nested exception is java.lang.IllegalStateException: argument type mismatch
HandlerMethod details: 
Controller [web.NewsController]
Method [public org.springframework.http.ResponseEntity<T> web.RESTfulController.update(java.lang.String,T,org.springframework.validation.BindingResult)]
Resolved arguments: 
[0] [type=java.lang.String] [value=1]
[1] [type=com.alibaba.fastjson.JSONObject] [value={"name":"发发","description":"阿尔法"}]
[2] [type=org.springframework.validation.BeanPropertyBindingResult] [value=org.springframework.validation.BeanPropertyBindingResult: 0 errors]

我试过自定义一个注解标识T泛型参数,然后定义参数解析器来自己手动转换,但BindingResult又强制要@RequestBody,我该如何让其可以自动转为对应实体类呢?

我用的fastjson是1.2.24版本,spring是4.3.3.RELEASE版本

Controller层代码如下:

@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
public ResponseEntity<T> update(@PathVariable("id") String id, @Valid @RequestBody T t, BindingResult result) {
    if (hasError(t, result)) {
        return new ResponseEntity<>(HttpStatus.CONFLICT);
    }

    service.update(t);
    return new ResponseEntity<>(HttpStatus.OK);
}

 

加载中
0
魏晋秋
魏晋秋
最终是换成Jackson就好了,应该是fast JSON不支持
返回顶部
顶部