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
官方不推荐这样做
THE END
二维码