使用restTemplate.postForEntity()的问题

 更新时间:2023年09月27日 10:25:19   作者:海枯石烂i  
这篇文章主要介绍了使用restTemplate.postForEntity()的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

使用restTemplate.postForEntity()

@Component
public class RemoteQuestUtil {
    @Autowired
    private RestTemplate restTemplate;
    public String send(String srvcCode, String request){
        //srvcCode 获取对应交易 现场适配
        MockPropertiesUtil instance = MockPropertiesUtil.getInstance();
        String url = instance.getProperty(srvcCode);
		//处理接收接口只支持JSONOBject
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        HttpEntity request1 = new HttpEntity<>(request, headers);
        log.info("请求报文:{}",request);
        ResponseEntity<String> jsonObjectResponseEntity = restTemplate.postForEntity(url, request1, String.class);
        String resp = jsonObjectResponseEntity.getBody();
        log.info("响应报文:{}",resp);
        return resp;
    }
}

MockPropertiesUtil

public class MockPropertiesUtil {
    public  static Properties pro = new Properties();
    public static MockPropertiesUtil instance = new MockPropertiesUtil();
    public static MockPropertiesUtil getInstance() {
        return instance;
    }
    static {
        InputStream in ;
        try {
                in = MockPropertiesUtil.class.getClassLoader().getResourceAsStream("mock-properties.properties"); //加载文件将文件加载为
        pro = new Properties();
            pro.load(in);
        } catch (IOException e) {
            log.error("加载Mock配置文件[mock-properties.properties]时异常",e);
            throw new PlatformException(PlatformError.LOADCONFIG_ERROR);
        }
        try {
            if (in != null){
                in.close();
            }
        } catch (IOException e) {
            log.error("关闭流异常",e);
        }
    }
    public String getProperty(String key) {
        if (StringUtil.isEmpty(key)) {
            log.warn("key is null.");
            return null;
        }
        if (!pro.containsKey(key)){
            log.info("无此服务码:{}",key);
            throw new PlatformException(PlatformError.GET_URL_BY_CODE_ERROR);
        }
        //通过键值获得对应的url key=url
        String url = pro.getProperty(key);
        log.info("服务码:{},对应的url为:{}",key,url);
        return url;
    }
}

RestTemplate().postForEntity的参数

RestTemplate().postForEntity() 是 Spring Framework 提供的一个用于发送 HTTP POST 请求并获取响应的方法。

以下是该方法的参数详解

  • url(String 类型):请求的目标 URL。可以是一个字符串形式的 URL,也可以是一个 URI 对象。示例:“http://example.com/api”。
  • request(Object 类型):表示要发送的请求体内容。可以是一个简单对象、一个 HttpEntity 对象或一个 MultiValueMap(用于传递表单数据)。根据实际需要确定所需的请求体内容。
  • responseType(Class 类型):表示期望的响应类型。可以是任何 Java 类型,包括自定义类型。例如,如果期望返回一个 User 对象,则可以将其设置为 User.class。
  • uriVariables(Object… 类型):可选参数,用于填充 URL 中的占位符。如果 URL 中包含占位符,可以通过这个参数来提供具体的值。
  • uri(URI 类型):可选参数,代替 url 参数,用于指定完整的请求目标 URI。

注意事项

  • 如果使用 url 参数,uriVariables 参数将用于替换 URL 中的占位符。
  • 如果使用 uri 参数,则忽略 url 和 uriVariables 参数。
  • 如果请求需要设置请求头或其他配置信息,可以使用 HttpEntity 对象构建请求。

方法返回一个 ResponseEntity 对象,其中包含 HTTP 响应的状态码、响应头以及解析后的响应体。你可以通过 ResponseEntity 对象获取所需的数据。

以下是一个使用 RestTemplate().postForEntity() 方法发送 POST 请求的示例代码:

import org.springframework.http.*;
import org.springframework.web.client.RestTemplate;
public class RestTemplateExample {
    public static void main(String[] args) {
        RestTemplate restTemplate = new RestTemplate();
        // 请求 URL
        String url = "http://example.com/api";
        // 构建请求体
        User user = new User("John", 30); // 自定义 User 类
        HttpEntity<User> request = new HttpEntity<>(user);
        // 发送 POST 请求并获取响应
        ResponseEntity<String> response = restTemplate.postForEntity(url, request, String.class);
        // 获取响应结果
        HttpStatus statusCode = response.getStatusCode();
        HttpHeaders headers = response.getHeaders();
        String body = response.getBody();
        // 处理响应结果
        System.out.println("Status Code: " + statusCode);
        System.out.println("Response Headers: " + headers);
        System.out.println("Response Body: " + body);
    }
}

也可以使用Map传递Json数据,

例如:

Map<String, Object> requestMap = new HashMap<>();
  // 发动机型号
requestMap.put("engine_model", "1234");
// 发动机编号
requestMap.put("engine_code", "6789"); 
  // 请求 URL
String url = "http://example.com/api";
 // 调对方接口
ResponseEntity<String> responseEntity = new RestTemplate().postForEntity(url, requestMap , String.class);
Map<String, Object> responseBodyMap = GsonUtil.gsonToMaps(responseEntity.getBody());
 // 对方接口返回值  true传输成功 false  失败
Map<String, Object> result = (Map<String, Object>) responseBodyMap.get("result");
boolean isSuccess = (Boolean) result.get("success");

根据上述的布尔值判断接口是否调用成功,进行后续逻辑。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 解决springboot jpa @Column columnDefinition等属性失效问题

    解决springboot jpa @Column columnDefinition等属性失效问题

    这篇文章主要介绍了解决springboot jpa @Column columnDefinition等属性失效问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • java反射获取包下所有类的操作

    java反射获取包下所有类的操作

    这篇文章主要介绍了java反射获取包下所有类的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • 通过AOP拦截Spring Boot日志并将其存入数据库功能实现

    通过AOP拦截Spring Boot日志并将其存入数据库功能实现

    本文介绍了如何使用Spring Boot和AOP技术实现拦截系统日志并保存到数据库中的功能,包括配置数据库连接、定义日志实体类、定义日志拦截器、使用AOP拦截日志并保存到数据库中等步骤,感兴趣的朋友一起看看吧
    2023-08-08
  • 如何解决@SpringBootApplication报错问题

    如何解决@SpringBootApplication报错问题

    这篇文章主要介绍了如何解决@SpringBootApplication报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • IDEA中log4j 无法输出到本地 properties配置无效问题

    IDEA中log4j 无法输出到本地 properties配置无效问题

    这篇文章主要介绍了IDEA中log4j 无法输出到本地 properties配置无效问题,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • SpringCloud Feign实现微服务之间相互请求问题

    SpringCloud Feign实现微服务之间相互请求问题

    Feign是Netflix开发的声明式、模板化的HTTP客户端, Feign可以帮助我们更快捷、优雅地实现微服务之间的调用,这篇文章主要介绍了SpringCloud Feign实现微服务之间相互请求,需要的朋友可以参考下
    2022-06-06
  • SpringBoot集成FastDFS依赖实现文件上传的示例

    SpringBoot集成FastDFS依赖实现文件上传的示例

    这篇文章主要介绍了SpringBoot集成FastDFS依赖实现文件上传,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • IDEA 集成 Docker 插件一键部署 SpringBoot 应用小结

    IDEA 集成 Docker 插件一键部署 SpringBoot 应用

    通过本文介绍的方法,我们期望能帮助开发者更轻松地在IDEA中实现Spring Boot应用的Docker化部署,为现代软件开发提供更便捷的解决方案,感兴趣的朋友一起看看吧
    2023-11-11
  • 使用Okhttp实现上传文件+参数请求接口form-data

    使用Okhttp实现上传文件+参数请求接口form-data

    在进行接口对接时,常遇到需要传递多种类型参数及文件上传的情况,解决此问题的关键在于参数传递和文件上传的正确处理,在Service层和Controller层的传参,可以通过@RequestParam标注或直接使用请求实体类,但若结合文件上传,则不应使用@RequestBody注解
    2024-10-10
  • Java利用Socket实现网络通信功能

    Java利用Socket实现网络通信功能

    在早期的网络编程中,Socket是很常见的实现技术之一,比如早期的聊天室,就是基于这种技术进行实现的,另外现在有些消息推送,也可以基于Socket实现,本文小编给大家介绍了Java利用Socket实现网络通信功能的示例,需要的朋友可以参考下
    2023-11-11

最新评论