使用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");

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

总结

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

相关文章

  • Spring中allowedOriginPatterns和allowedOrigins方法有何不同详解

    Spring中allowedOriginPatterns和allowedOrigins方法有何不同详解

    这篇文章主要给大家介绍了关于Spring中allowedOriginPatterns和allowedOrigins方法有何不同,allowedOriginPatterns和allowedOrigins都是用来设置允许跨域请求的来源,需要的朋友可以参考下
    2023-10-10
  • springboot2.3.1替换为其他的嵌入式servlet容器的详细方法

    springboot2.3.1替换为其他的嵌入式servlet容器的详细方法

    这篇文章主要介绍了springboot2.3.1替换为其他的嵌入式servlet容器的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • Spring-cloud-eureka使用feign调用服务接口

    Spring-cloud-eureka使用feign调用服务接口

    这篇文章主要为大家详细介绍了Spring-cloud-eureka使用feign调用服务接口,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • JSON,AJAX,Maven入门基础

    JSON,AJAX,Maven入门基础

    这篇文章主要介绍了JSON,AJAX和Maven基础,如何使用AJAX读取Json数组里面的数据,感兴趣的小伙伴们可以参考一下,希望能够帮助到你
    2021-07-07
  • Java中超详细this与super的概念和用法

    Java中超详细this与super的概念和用法

    这篇文章主要介绍了Java中超详细this与super的概念和用法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • Java Spring详解如何配置数据源注解开发以及整合Junit

    Java Spring详解如何配置数据源注解开发以及整合Junit

    Spring 是目前主流的 Java Web 开发框架,是 Java 世界最为成功的框架。该框架是一个轻量级的开源框架,具有很高的凝聚力和吸引力,本篇文章带你了解如何配置数据源、注解开发以及整合Junit
    2021-10-10
  • java字符串反转示例分享

    java字符串反转示例分享

    这篇文章主要介绍了将一个字符串进行反转或者字符串中指定部分进行反转的方法,大家参考使用吧
    2014-01-01
  • 一文读懂JAVA中HttpURLConnection的用法

    一文读懂JAVA中HttpURLConnection的用法

    这篇文章主要介绍了JAVA中的HttpURLConnection用法,文中讲解非常细致,供大家参考和学习,感兴趣的朋友可以了解下
    2020-06-06
  • SpringBoot使用FreeMarker模板发送邮件

    SpringBoot使用FreeMarker模板发送邮件

    这篇文章主要为大家详细介绍了SpringBoot使用FreeMarker模板发送邮件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • 利用Spring Boot如何开发REST服务详解

    利用Spring Boot如何开发REST服务详解

    这篇文章主要给大家介绍了关于利用Spring Boot如何开发REST服务的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-12-12

最新评论