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

resttemplate设置params

如何使用RestTemplate设置请求参数

RestTemplate设置请求参数的方式根据请求类型(GET/POST)和参数形式(路径参数、查询参数、JSON请求体)有所不同,以下是具体实现方法:


一、GET请求参数设置
  1. 路径参数
    使用占位符{param},通过Map或可变参数传递:

    // 使用Map传参
    Map<String, String> uriVariables = new HashMap<>();
    uriVariables.put("id", "123");
    String result = restTemplate.getForObject("http://example.com/api/{id}", String.class, uriVariables);
    
    // 或使用可变参数
    String result = restTemplate.getForObject("http://example.com/api/{id}", String.class, "123");
    
  2. 查询参数
    使用UriComponentsBuilder构建带参数的URL:

    UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl("http://example.com/api/data")
        .queryParam("name", "John")
        .queryParam("age", 25);
    String url = builder.toUriString();
    String result = restTemplate.getForObject(url, String.class);
    

二、POST请求参数设置
  1. JSON请求体
    使用HttpEntity封装嵌套JSON参数,并设置请求头:

    // 构建嵌套参数
    Map<String, Object> paramMap = new HashMap<>();
    Map<String, String> queryMap = new HashMap<>();
    queryMap.put("c1", "value1");
    paramMap.put("a", "valueA");
    paramMap.put("b", queryMap);
    
    // 设置请求头
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    HttpEntity<Map<String, Object>> entity = new HttpEntity<>(paramMap, headers);
    
    // 发送请求
    String response = restTemplate.postForObject("http://example.com/api", entity, String.class);
    

    引用示例中的多层嵌套JSON构建方式。

  2. 表单参数
    使用MultiValueMap传递表单数据:

    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
    MultiValueMap<String, String> formData = new LinkedMultiValueMap<>();
    formData.add("username", "admin");
    formData.add("password", "123456");
    HttpEntity<MultiValueMap<String, String>> entity = new HttpEntity<>(formData, headers);
    
    ResponseEntity<String> response = restTemplate.postForEntity("http://example.com/login", entity, String.class);
    

三、配置RestTemplate超时(可选)

通过配置类设置连接和读取超时:

@Configuration
public class RestTemplateConfig {
    @Bean
    public RestTemplate restTemplate() {
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
        factory.setConnectTimeout(10000); // 10秒
        factory.setReadTimeout(10000);    // 10秒
        return new RestTemplate(factory);
    }
}

引用配置类示例。


四、处理复杂响应

解析JSON响应并提取数据:

ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, entity, String.class);
JSONObject jsonResponse = new JSONObject(response.getBody());
if ("0000".equals(jsonResponse.getJSONObject("parameter").getString("code"))) {
    String result = jsonResponse.getString("result");
}

引用响应处理方法。


相关问题

http://www.dtcms.com/a/106498.html

相关文章:

  • C++与Python初始化最小和最大整数
  • 多传感器融合SLAM中如何检验编写的Factor是否有效
  • 黑马点评。1 导入黑马点评项目
  • C++ 中的 **CRTP
  • 鸿蒙定位开发服务
  • 论文浅尝 | Interactive-KBQA:基于大语言模型的多轮交互KBQA(ACL2024)
  • HTML 媒体(Media)学习笔记
  • 使用Apache HttpClient编写Java爬虫
  • Python | 第十一章 | 模块和包 | 面向对象编程_基础部分
  • Java安全基础-反射机制
  • 《AI大模型应知应会100篇》第2篇:大模型核心术语解析:参数、Token、推理与训练
  • 基于微信小程序的智慧乡村旅游服务平台【附源码】
  • 聊聊Spring AI的EmbeddingModel
  • 好文和技术网站记录
  • Java虚拟机面试题:引言
  • 【Zabbix技术系列文章】第⑥篇——Zabbix 高级运维与优化
  • leetcode118.杨辉三角
  • Unity注册表修改分辨率:探索幕后设置与手动调控
  • 学习笔记—数据结构—排序
  • 第十二节课:Python语言程序设计和前阶段复盘总结
  • 数字孪生技术解析:开启虚拟与现实融合新时代
  • 界面架构 - 主流架构(Qt)
  • 动态取消Spring Boot通过注解@EnableScheduling启动的定时任务
  • MySQL(1)
  • 【图像处理基石】什么是RAW格式?
  • React DndKit 实现类似slack 类别、频道拖动调整位置功能
  • # BERT架构及详解
  • C# 中实现不同程序进程间消息交互
  • 【Linux网络#18】:深入理解select多路转接:传统I/O复用的基石
  • ETCD --- lock详解