当前位置: 首页 > article >正文

利用Openfeign远程调用第三方接口(案例:百度地图逆地理编码接口,实现通过经纬度坐标获取详细地址)

文章目录

    • 1、注册百度地图账号
    • 2、编写代码
      • 2.1、添加openfeign依赖
      • 2.2、主启动类加注解@EnableFeignClients
      • 2.3、写远程调用的OpenFeign接口
    • 3、测试&响应结果
    • 4、添加feign日志&注意事项
      • 4.1、添加日志
      • 4.2、注意事项

1、注册百度地图账号

https://lbsyun.baidu.com/apiconsole/key

在这里插入图片描述
获取AK(COPY出来,以后要用)
在这里插入图片描述
查看百度地图逆地理解析接口文档:

PI服务地址
https://api.map.baidu.com/reverse_geocoding/v3/?ak=您的ak&extensions_poi=1&entire_poi=1&sort_strategy=distance&output=json&coordtype=bd09ll&location=39.951335108535, 116.51484487905
//GET请求

请求地址:

get: https://api.map.baidu.com/reverse_geocoding/v3/

请求参数如下:

在这里插入图片描述

keyvalue
ak:“PRyu1SQEdG4rihx0RDxxxxxxx”,
output:“json”,
extensionsPoi:“1”,
location:“31.225696563611,121.49884033194”

参数说明:

ak:百度地图 API Key(需要自己申请)

output:输出格式(json/xml)

extensions_poi 是一个 扩展参数,用于返回周边的 POI(兴趣点,Points of Interest) 信息,例如餐馆、商店、学校等。

location:经纬度(格式 lat,lng)

2、编写代码

2.1、添加openfeign依赖

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

2.2、主启动类加注解@EnableFeignClients

@EnableFeignClients
//@EnableDiscoveryClient //核心注解
@SpringBootApplication
public class OrderMainApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderMainApplication.class, args);
    }
}

2.3、写远程调用的OpenFeign接口

package com.tigerhhzz.order.openfeign;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * @Author tigerhhzz
 * @Date 2025 03 25 13 00
 **/
@FeignClient(value = "baidumap-client",url = "http://api.map.baidu.com")
public interface BaiduMapOpenfeign {

    @GetMapping("/reverse_geocoding/v3")
    String getLocationByLonLat(@RequestParam String ak, @RequestParam String output, @RequestParam String extensionsPoi, @RequestParam String location);

}

3、测试&响应结果

package com.tigerhhzz.order;

import com.tigerhhzz.order.openfeign.BaiduMapOpenfeign;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

/**
 * @Author tigerhhzz
 * @Date 2025 03 25 13 07
 **/
@SpringBootTest
public class BaidumapTest {

    @Autowired
    BaiduMapOpenfeign baiduMapOpenfeign;

    @Test
    void test01(){
        String location = baiduMapOpenfeign.getLocationByLonLat("PRyu1SQEdG4rihxxxxxxS8NIcsc", "json", "1", "31.225696563611,121.49884033194");
        System.out.println(location);
    }
}

响应结果(包含 POI 信息):

{
	"status": 0,
	"result": {
		"location": {
			"lng": 121.49884033193993,
			"lat": 31.225696429417988
		},
		"formatted_address": "上海市黄浦区净土街31弄-4号",
		"edz": {
			"name": "陆家嘴金融贸易区"
		},
		"business": "老西门,城隍庙,西藏南路",
		"business_info": [
			{
				"name": "老西门",
				"location": {
					"lng": 121.49270784559798,
					"lat": 31.22284211295233
				},
				"adcode": 310101,
				"distance": 0,
				"direction": "内"
			},
			{
				"name": "城隍庙",
				"location": {
					"lng": 121.49754405297205,
					"lat": 31.231853482990294
				},
				"adcode": 310101,
				"distance": 394,
				"direction": "南"
			},
			{
				"name": "西藏南路",
				"location": {
					"lng": 121.49155262471214,
					"lat": 31.219955867050826
				},
				"adcode": 310101,
				"distance": 629,
				"direction": "东北"
			}
		],
		"addressComponent": {
			"country": "中国",
			"country_code": 0,
			"country_code_iso": "CHN",
			"country_code_iso2": "CN",
			"province": "上海市",
			"city": "上海市",
			"city_level": 2,
			"district": "黄浦区",
			"town": "老西门街道",
			"town_code": "310101019",
			"distance": "58",
			"direction": "北",
			"adcode": "310101",
			"street": "净土街",
			"street_number": "31弄-4号"
		},
		"pois": [],
		"roads": [],
		"poiRegions": [],
		"sematic_description": "",
		"formatted_address_poi": "",
		"cityCode": 289
	}
}

formatted_address:地址信息

pois:POI 兴趣点列表

name:兴趣点名称

addr:兴趣点地址

point:兴趣点坐标

distance:距离查询点的距离(单位:米)

tag:类别(如景点、商场、餐厅等)

4、添加feign日志&注意事项

4.1、添加日志

在配置文件application.yml中添加:

logging:
  level:
    com.tigerhhzz.order.openfeign: debug

然后新建如下配置类:

package com.tigerhhzz.order.config;

import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;


@Configuration
public class OrderServiceConfig {


    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

    @Bean
    Logger.Level feignLoggerLevel(){
        return Logger.Level.FULL;
    }
}

日志输出:

在这里插入图片描述

4.2、注意事项

在百度地图控制台,相应的api接口中加上发送请求主机的ip白名单;否则会提示如下检验失败的信息:
在这里插入图片描述

在这里插入图片描述


真正的强大不是忘记,而是接受



http://www.kler.cn/a/611045.html

相关文章:

  • 【工具分享 - Redis桌面客户端】Tiny RDM
  • Linux:(模拟HTTP协议,GET和POST方法,Http的状态码)
  • DeepSeek概述
  • Spring Boot 整合 OpenFeign 教程
  • 游戏引擎 Unity - Unity 主要窗口(层级、场景、游戏、检查器、项目、 控制台)
  • node-ddk,electron,主进程通讯,窗口间通讯
  • 图解AUTOSAR_SWS_UDPNetworkManagement
  • 26考研——图_图的应用(6)
  • Maven工具学习使用(一)——MAVEN安装与配置
  • 企业级基于SpringBoot的MQTT的构建和使用
  • Vue3项目中的.vscode文件夹
  • 【软考-架构】9.3、端口扫描-安全体系-网络安全技术和协议
  • 海思烧录工具HITool电视盒子刷机详解
  • 初识MySQL · 约束
  • 【react18】react项目使用mock模拟后台接口
  • 【R语言可视化】人口金字塔
  • 游戏引擎学习第183天
  • 7.5 窗体事件
  • 如何理解FFMPEG两个宏 1.MATCH_PER_TYPE_OPT, 2.MATCH_PER_STREAM_OPT
  • 【Python】编程50个经典操作