炫意html5
最早CSS3和HTML5移动技术网站之一

MyBatisPlus的Controller层的参数是QueryWrapper<T>,(GET请求)请问用postman怎么给它传参啊?

我用的是could框架,A服务调用B服务,B服务集成MaBatisPlus请求参数方法是查询,用的GET请求,但我用postman请求时,怎么也无法把值传给queryWrapper,用A服务通过feign也调用不到queryWrapper;希望大神帮帮忙;

这是B服务的代码:(这里的QueryWrapper不知道怎么用postman给值)

@GetMapping("/" + VersionConstant.VERSION + "/getTAppInfoWrapperByObject")
public AjaxResult<JSONObject> getTAppInfoWrapperByObject(@RequestParam QueryWrapper<TAppInfo> queryWrapper){
if(log.isDebugEnabled()){
log.debug(QUERYWRAPPER,queryWrapper);
}
List<Object> result;
try{
result = service.listObjs(queryWrapper);
if(log.isDebugEnabled()){
log.debug(RESULT,result);
}
Preconditions.checkNotNull(result);
Preconditions.checkArgument(!result.isEmpty());
}catch (IllegalArgumentException e){
log.error(ConstantsCode.DATA_IS_EMPTY.getName(), e);
throw new HttpCodeException(HttpStatus.NOT_FOUND, ConstantsCode.DATA_IS_EMPTY.getName());
}catch (Exception e) {
log.error(ConstantsCode.DATABASE_EXCEPTION.getName(), e);
throw new HttpCodeException(HttpStatus.INTERNAL_SERVER_ERROR, ConstantsCode.DATABASE_EXCEPTION.getName());
}
JSONObject jsonObject = new JSONObject();
jsonObject.put(RESULT_JSON,result);
return new AjaxResult<JSONObject>().success(jsonObject);
}

 

这是A服务的代码:

@Slf4j
@RestController
public class TAppInfoControllerDemo {
@Autowired
private TAppInfoDemoFeign  tAppInfoDemoFeign;
@GetMapping("/" + VersionConstant.VERSION + "/v1")
public AjaxResult<JSONObject> getTAppInfoWrapperByObject(){
QueryWrapper<TAppInfo> queryWrapper1 = new QueryWrapper<>();
TAppInfo d = new TAppInfo();
d.setAppId("1051341295332888576");
d.setDeveloperId("1");
queryWrapper1.setEntity(d);
//        QueryWrapper<TAppInfo> status = queryWrapper1.select("status");
//        Map<String,Object> map = new HashMap<>();
//        map.put("queryWrapper",status);
//        queryWrapper1.eq("developer_id","1");
//        queryWrapper1.lambda().eq(TAppInfo::getDeveloperId,"1").eq(TAppInfo::getAppId,"1051657738884747264");
//        System.out.println(queryWrapper1.getSqlSegment());
AjaxResult<JSONObject> tAppInfoWrapperByObject = tAppInfoDemoFeign.getTAppInfoWrapperByObject(queryWrapper1);
return  tAppInfoWrapperByObject;
}
}

 

这是feign,A调用feign,feign调用B

@FeignClient(name="mybatis-plus-demo")
public interface TAppInfoDemoFeign {
@ApiOperation(value = "t-app-info表自定义条件查询数据", notes = "响应200表示成功,403表示参数为空,404表示没有查到数据,500表示执行SQL异常")
@GetMapping("/" + VersionConstant.VERSION + "/getTAppInfoWrapperByObject")
AjaxResult<JSONObject> getTAppInfoWrapperByObject(@RequestParam(value = "queryWrapper") QueryWrapper<TAppInfo> queryWrapper);
}

 

最终的目的就是要把A服务中的QueryWrapper传给B服务;但不能直接传,有没有大神帮帮忙啊?

 

回答

我和你有同样的想法,如果能这样传递的话,前端部分就容易写的多,只是我试了下,报错啊,querywrapper貌似不能序列化传递啊

我也是   有没有解决办法

没有getter setter 不好用普通的json框架(或者不好用json框架去做) , 你这个需求可以做到,就是麻烦点,你这个本质上是交换field的值,所以找一个gson框架,进行序列反序列化(我记得gson是根据field进行序列化对象的,赋值应该也是一样),如果gson不行,就手动取,手动赋值,搞个字符串带过去,接受端对字符串进行解码,赋值到querywrapper中

我找了找,用gson就行

https://stackoverflow.com/questions/6203487/why-does-gson-use-fields-and-not-getters-setters

官方不推荐这样做

炫意HTML5 » MyBatisPlus的Controller层的参数是QueryWrapper<T>,(GET请求)请问用postman怎么给它传参啊?

CSS3教程HTML5教程