使用OpenFeign+Validator优雅对接第三方接口

2022-10-14 09:35:42 491

例如对接百度的根据ip查询地理信息的接口

这里使用的是OpenFeign

import com.xxx.xxx.thirdparty.dto.baidu.BaiduIpInfoDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

@FeignClient(name = "baiduApiClient", url = "https://api.map.baidu.com")
public interface BaiduApiClient {

    // baidu access token 使用el表达式填入
    @GetMapping("/location/ip?ak=${baidu.map.ak}&coor=bd09ll")
    BaiduIpInfoDTO locationIp(@RequestParam("ip") String ip);
}
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import org.hibernate.validator.constraints.Range;

import javax.validation.constraints.NotNull;


@Data
public class BaiduIpInfoDTO {

    private String address;

    private Content content;

    @NotNull
    @Range(max = 0)
    private Integer status;

    @Data
    public static class AddressDetail {

     
        private String adcode;

        private String city;

        @JsonProperty("city_code")
        private Integer cityCode;

        private String district;

        private String province;

        private String street;

        @JsonProperty("street_number")
        private String streetNumber;
    }

    @Data
    public static class Point {
        private String x;

        private String y;
    }

    @Data
    public static class Content {
        private String address;
        @JsonProperty("address_detail")
        private AddressDetail addressDetail;
        private Point point;
    }
}
public class BaiduRest {

    @Autowired
    BaiduApiClient baiduApiClient;

    @Override
    public FeignResponse getIpInfo(String ipAddress) {
        BaiduIpInfoDTO dto = baiduApiClient.locationIp(ipAddress);
        // 通过校验字段信息判断是否查询成功 BaiduApiClient也可以配置Fallback
        return FluentValidatorUtils.checkBeanField(dto).isSuccess() ?
                FeignResponse.ok(dto) : FeignResponse.fail("查询失败");
    }
}


使用OpenFeign+Validator优雅对接第三方接口

例如对接百度的根据ip查询地理信息的接口这里使用的是OpenFeignimport com.xxx.xxx.thirdparty.dto.baidu.BaiduIpInfoDTO; import org.springframework.cloud.openfeign.FeignClient; imp
2022-10-14

微服务架构中OpenFeign请求的流程

1. 代理目标方法注入容器 (OpenFeign)2. 创建请求对象, 组装参数 (OpenFeign)3. 维护服务注册表(Ribbon + Nacos), 且根据负载均衡算法(Ribbon)选取一个真实的服务地址将http://base-service/getInfo替换为http://127.
2022-08-01

OpenFeign统一Fallback处理

@Slf4j @Configuration(proxyBeanMethods = false) public class FeignLoadBalancedConfiguration { @Bean public LoadBalancerFeignClient feignClie
2022-04-20

解决openfeign的fallback与springmvc注解冲突

@RequestMapping("/account") public interface AccountFeign { @PostMapping("/test") String test(); } @FeignClient(name = "${xxx.feign.basic}"
2021-09-02

SpringCloud OpenFeign 微服务调用

现有xxx-common 和 xxx-user两个微服务, 现需要在common中调用user的服务添加依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-start
2021-04-10

freemarker 时间显示不正常 设置时区

项目在本地开发的时候显示正常,部署上服务器就一直差8个小时,最后发现freemarker官方文档有这样的说明time_zone:时区的名称来显示并格式化时间。 默认情况下,使用JVM的时区。 也可以是 Java 时区 API 接受的值,或者 "JVM default" (从 FreeMarker 2
2020-03-28
IDEA 2019.1 xml 不高亮

IDEA 2019.1 xml 不高亮

前几天更新了idea后,发现xml里的代码都没有了高亮,变得跟记事本一个德性了打开setting ,搜索 File Types,找到xml项, 查看下方的匹配格式,果然没有xml,(idea真是厉害)点击右方的+,输入*.xml,点击ok,解决问题
2020-03-28

npm install 淘宝镜像

npm install --registry=https://registry.npm.taobao.org
2020-03-28
Java中方法的参数传递机制

Java中方法的参数传递机制

来看一段代码 public class Man { private String name; private Integer age; public String getName() { return name; } publi
2020-03-28
基于自定义注解手写权限控制

基于自定义注解手写权限控制

方法一: AOP 方法二: 拦截器项目结构项目依赖<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-w
2020-03-28

Docker 部署 详细全过程 附代码

Docker 部署本站 全过程环境:CentOS7.61. 安装Docker其他版本CentOS可以参考这个https://help.aliyun.com/document_detail/187598.html查看本机内核版本,内核版本需高于 3.10uname -r 确保 yum 包最新yum u
2020-03-28

SpringBoot 启动普通java工程

引入依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.0.9</version> </dependency>
2020-03-28

Vue.js DOM操作

<template> <input type="button" @click="reply($event)" value="回复"> </template> export default { methods: { replyFun(e) {
2020-03-29
CentOS7编译调试OpenJDK12

CentOS7编译调试OpenJDK12

1. 下载源码https://hg.openjdk.java.net/jdk/jdk12点击左侧的browse,再点击zip,就可以下载zip格式的源码压缩包。unzip xxx.zip 解压文件2. 安装jdkyum install java-11-openjdk-devel -y3. 运行con
2020-04-23
编写自己的Spring Boot Starter

编写自己的Spring Boot Starter

1.新建一个maven项目命名规则统一是xxx-spring-boot-starter完整pom.xml<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"
2020-06-29