栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringCloud - OpenFeign的feign接口和远程服务接口的请求类和响应类是否可以不一样?

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringCloud - OpenFeign的feign接口和远程服务接口的请求类和响应类是否可以不一样?

问题:feign接口中的请求类和远程服务接口的请求类是否可以不一样?feign接口中的响应类和远程服务接口的响应类是否可以不一样?

① 首先将knowledge和auth服务都配置进eureka:

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

② auth服务的项目路径为:

server:
  port: 8081
  servlet.context-path: /ngso/AUTH/

③ 远程auth服务的接口:

@Api(tags = "用户表")
@Slf4j
@Validated
@RestController
@ResponseResult
@RequestMapping("/api/v2")
public class UserController {

    @Autowired
    private IUserService userService;

    @PostMapping("/users/inner/exact")
    public PageData exactPageQueryUserList(@Validated @RequestBody UserQo userQo,
                                                       @RequestParam(SessionKey.DOMAIN_ID) String domainId) {
        userQo.setDomainId(domainId);
        return userService.exactPageQueryUserList(userQo);
    }
}

请求类UserReqDto:

@Data
public class UserReqDto {

    @ApiModelProperty(value = "用户ID集合")
    private List userIds;

    @ApiModelProperty(value = "分页页码")
    @Min(value = 1, message = "页码需要从1开始")
    private int pageNum;

    @ApiModelProperty(value = "分页页面条数")
    @Min(value = 1, message = "分页条数需要从1开始")
    private int pageSize;

    public UserReqDto(List userIds){
        this.userIds = userIds;
    }
}

响应类UserResp:

@Data
public class UserResp {
    @ApiModelProperty("主键")
    private String id;

    @ApiModelProperty("用户名")
    private String name;
}

④ knowledge服务的feign接口,调用远程auth服务的接口:

@FeignClient(name = "AUTH")
public interface AuthFeignService {
    @PostMapping("/ngso/AUTH/api/v2/users/inner/exact")
    PageData exactPageQueryUserList(
            @RequestBody UserReqDto userReqDto,
            @RequestParam(SessionKey.DOMAIN_ID) String domainId);
}

请求类UserQo:

@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@ApiModel(description = "用户表的查询参数")
public class UserQo extends PageData implements Serializable {

    private static final long serialVersionUID = 5730367880056040405L;

    @ApiModelProperty("用户ID")
    private String id;

    @ApiModelProperty("当前操作者的ID")
    private String operator;

    @ApiModelProperty("用户名")
    private String name;

    @ApiModelProperty("精确查询的名称集合")
    private List exactNames;

    @ApiModelProperty("角色描述")
    private String description;

    @ApiModelProperty("用户名或描述")
    private String nameOrDescription;

    @ApiModelProperty("手机号码")
    private String phone;

    @ApiModelProperty("电子邮箱")
    private String email;

    @ApiModelProperty("域ID")
    private String domainId;

    @ApiModelProperty("租户ID")
    private String projectId;

    @ApiModelProperty("租户ID集合")
    private List projectIds;

    @ApiModelProperty(value = "用户类型")
    private String type;

    @ApiModelProperty(value = "用户ID集合")
    private List userIds;

    @ApiModelProperty("用户可见性字段")
    private Integer visible;

    @ApiModelProperty("内置角色不能删除、禁用、修改")
    private Integer builtIn;
}

响应类UserEntity :

@Data
@ApiModel(value = "用户实体")
public class UserEntity implements Serializable {

    private static final long serialVersionUID = 671647501342140183L;

    public static final Integer OPTIONS_NOT_VISIBLE_TO_USER = 8;

    @ApiModelProperty("主键")
    private String id;

    @ApiModelProperty("用户名")
    private String name;

    @ApiModelProperty("密码")
    private String password;

    @ApiModelProperty("手机号码")
    private String phone;

    @ApiModelProperty("电子邮箱")
    private String email;

    @ApiModelProperty("用户描述")
    private String description;

    @ApiModelProperty("域ID")
    private String domainId;

    @ApiModelProperty("租户ID")
    private String projectId;

    @ApiModelProperty("是否启用")
    private Integer enabled;

    @ApiModelProperty("创建时间")
    private Date createTime;

    @ApiModelProperty("更新时间")
    private Date updateTime;

    @ApiModelProperty("修改密码时间")
    private Date changeTime;

    @ApiModelProperty("登录时间")
    private Date loginTime;

    @ApiModelProperty("0:默认未定义;1:第一次登录不要求改密码;2:忽略密码过期检查;4:账号可以重置自己的密码;8:用户不可见")
    private Integer options;

    @ApiModelProperty("内置账号不能编辑、禁用、删除")
    private Integer builtIn;
}

⑤ 在knowledge服务中调用feign接口:

@Override
public String addDoc() {
    List userIds = new ArrayList<>();
     UserInfo userInfo = UserInfoShareHolder.getUserInfo();
    userIds.add(userInfo.getId());
    UserReqDto userReqDto = new UserReqDto(userIds);
    userReqDto.setPageNum(1);
    userReqDto.setPageSize(1);
    PageData pageDataApiResponse = authFeignService
        .exactPageQueryUserList(userReqDto, UserInfoShareHolder.getUserInfo().getDomainId());
}

结论:是不是觉得很神奇?

① feign接口中的请求类和远程服务接口的请求类可以不一样

② feign接口中的响应类和远程服务接口的响应类可以不一样

数据的传输是以json格式进行传输的,调用@RequestBody注解会将请求的实体类UserReqDto转换为json数据,远程调用exactPageQueryUserList(@Validated @RequestBody UserQo userQo,@RequestParam(SessionKey.DOMAIN_ID) String domainId)时,又会将json数据转换为UserQo 实体类

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/343331.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号