RestTemplate使用实战(二)-复杂多层嵌套对象的处理和封装

本文介绍了如何使用RestTemplate处理复杂多层嵌套对象,通过Fastjson和Jackson进行序列化操作。文章首先回顾了发起http请求的基本步骤,指出在实际开发中需要提取http调用的共性,以简化代码。接着,详细讲解了如何使用Fastjson和Jackson自定义RestTemplate,提供统一的请求封装,并展示了具体实现代码。最后,通过XiaoAMaController的例子,演示了如何利用这些封装直接获取泛型类型的远程调用结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在上一节的文章中,我们学习了restTemplate的基础用法。但是在日常的开发中,我们通常需要更加通用的方式来处理http远程调用。

先来回忆一下,发起一个请求需要哪些步骤:

        //1、设置访问url
		String url = RemoteUrl + "/id";
        //2、设置Http的Header
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON_UTF8);

		//3、设置访问参数
        HashMap<String, Object> params = new HashMap<>();
        params.put("name", name);
        
		//4、设置访问的Entity
        HttpEntity entity = new HttpEntity<>(params, headers);
        ResponseEntity<String> result = null;
        try {
   
        	//5、发起一个POST请求
            result = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
            JSONObject data = JSONObject.parseObject(result.getBody()).getJSONObject("data");
            return data.getString("id");

可以看到,每次发起http请求调用的时候,我们需要准备一系列的参数。如果在生产中,我们这样处理的话,那将会有很多的重复逻辑。

为了能更好的聚焦业务需求开发,我们需要提炼http远程请求的能力,提供统一的基础调用能力。

今天,就给大家带来restTemplate的使用实战进阶,restTemplate对复杂多层嵌套对象的处理和封装。

将分别通过开发中常用的两种序列化工具 fastjson和jackson来分别给交给大家。

类和对象

定义统一的返回类Result

public class Result<T> {
   

    private String code;
    private T data;
    private String message;

    public String getCode() {
   
        return code;
    }

    public void setCode(String code) {
   
        this.code = code;
    }

    public T getData() {
   
        return data;
    }

    public void setData(T data) {
   
        this.data = data;
    }

    public String getMessage() {
   
        return message;
    }

    public void setMessage(String message) {
   
        this.message = message;
    }
}

Fastjson

引入fastjson的依赖,建议使用1.2.68以上的版本,避免安全漏洞。

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.73</version>
        </dependency>

自定义restTemplate,以post请求为例,提供统一的封装。

@Component
public class MyRestTemplate {
   

    private Logger logger = LoggerFactory.getLogger(MyRestTemplate.class);

    private static final String HTTP_STATUS_SUCCESS = "200";

    @Autowired
    private RestTemplate restTemplate;

    public <T> T postForResult(String url, Class<T> cls, Object body, Object... uriVariables) {
   
        Respo
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值