fastjson SpringMVC中泛型对象参数的转换问题

dl5txlt9  于 2021-11-27  发布在  Java
关注(0)|答案(6)|浏览(276)

springmvc项目中把jackson替换成fastjson遇到问题

@RequestMapping("/testBind")  
@ResponseBody  
public String testBind(@RequestBody MgQueryCondition<TestBean> queryCondition){  
    System.out.println(queryCondition);  

    return "success";  
}

上面的controller接收参数时,只有外层的MgQueryCondition转换成功了,内部的TestBean类型转化失败。
转换时针对泛型类型,使用TypeReference进行解析可以,但是这样@requestbody注解就没办法用了。
请问目前有办法解决吗?谢谢

nimxete2

nimxete21#

1.2.15新版本的com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter4应该支持的,你试试看?

9wbgstp7

9wbgstp73#

@lqs0112 FastJsonHttpMessageConverter是对泛型类型完全支持的, 请见testcase #758.
FastJsonHttpMessageConverterTest.test4()

8iwquhpp

8iwquhpp4#

@lqs0112 不知为何好多泛型会出现问题, 请提供一下测试数据或测试用例.

ohfgkhjo

ohfgkhjo5#

@wenshao 多谢,spring升级到4.3,使用1.2.15版的FastJsonHttpMessageConverter4参数转化没有问题

fxnxkyjh

fxnxkyjh6#

@VictorZeng 之前一直使用的4.1.16的spring,使用FastJsonHttpMessageConverter确实不支持泛型转化。
页面post请求参数:
{"pageNo":1,"cond":{"fltNo":"ZH9015","arrdep":"D","queryDate":"1471708800000"}}

服务端方法:
OpRst getFlightsByFltNoCond(@requestbody PageCond pageCond){
}

/**

  • 分页查询条件

  • @author liqingshan

*/
public class PageCond {
private int pageNo;
private int pageSize = 10;

private T cond;

public int getPageNo() {
return pageNo;
}

public void setPageNo(int pageNo) {
this.pageNo = pageNo;
}

public int getPageSize() {
return pageSize;
}

public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}

public T getCond() {
return cond;
}

public void setCond(T cond) {
this.cond = cond;
}
}

/**

  • 航班号查询条件

  • @author liqingshan 2016-01-12

*/
public class FltNoCond {
private String fltNo;
private ArrdepFlag arrdep;
private Date queryDate;
public String getFltNo() {
return fltNo;
}
public void setFltNo(String fltNo) {
this.fltNo = fltNo;
}
public ArrdepFlag getArrdep() {
return arrdep;
}
public void setArrdep(ArrdepFlag arrdep) {
this.arrdep = arrdep;
}
public Date getQueryDate() {
return queryDate;
}
public void setQueryDate(Date queryDate) {
this.queryDate = queryDate;
}
}

接收到的结果:
pageCond.cond为空

相关问题