Spring Java代码如何将userParameter加入request并合并两个返回值
实现方案
前置类结构修改
首先需要调整两个业务类的结构,用来承载额外的UserParameter参数:
- 给
GetChannelAccountReq新增UserParameter类型的成员变量,生成对应的getter/setter方法,示例:
// GetChannelAccountReq类新增内容 private UserParameter userParam; public UserParameter getUserParam() { return userParam; } public void setUserParam(UserParameter userParam) { this.userParam = userParam; }
- 给
GetChannelAccountRes新增UserParameter类型的成员变量,生成对应的getter/setter方法,示例:
// GetChannelAccountRes类新增内容 private UserParameter queryUserParam; public UserParameter getQueryUserParam() { return queryUserParam; } public void setQueryUserParam(UserParameter queryUserParam) { this.queryUserParam = queryUserParam; }
如果不想侵入原有请求、响应类,也可以单独封装自定义DTO包裹原有返回结果和UserParameter对象返回。
业务代码修改
public GetChannelAccountRes getAccounts(GetChannelAccountReq request) { // 注意:当前代码直接new LawAccountEntity未赋值,account.getAccountOwnerType()默认为null,if分支永远不会触发,需要按业务逻辑给account赋值 LawAccountEntity account = new LawAccountEntity(); // 把userParameter定义在if分支外,保证分支外可以访问到 UserParameter userParameter = null; if(request.getTransactionCode().equals("yyyyyyy") && "1".equals(account.getAccountOwnerType())) { userParameter = userParameterRepository.findByGroupKeyAndKey("xxxxxxx","11111111"); // 非空判断避免空指针 if (userParameter != null) { // 将查询到的userParameter添加到request对象中 request.setUserParam(userParameter); } } GetChannelAccountRes response = remoteChannelAccountInquiryService.getAccounts(request); // 合并userParameter到返回结果 response.setQueryUserParam(userParameter); return response; }
注意事项
- 必须按业务逻辑给
LawAccountEntity对象赋值,否则刚new的空对象的accountOwnerType为空,if分支永远无法进入 - 数据库查询返回的
userParameter建议做空校验,避免空指针异常 - 如果
remoteChannelAccountInquiryService.getAccounts内部会修改入参request的内容,可以提前复制request对象再传入,避免原对象被污染
内容的提问来源于stack exchange,提问作者sadpatato
相关产品推荐
相关产品推荐

