RestTemplate中form请求方式

本文介绍了如何使用RestTemplate进行远程调用,特别是form和payload两种参数提交方式。详细探讨了RestTemplate的postForObject方法以及HttpEntity在请求过程中的作用,展示了HttpEntity的不同构造器。

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

在这里插入图片描述
1.restTemplate是为我们提供了一种更简便进行远程调用的方式。
一般来说我们常用的提交参数方式有form和payload方式,下面简单记载一下。

form 方式

		HttpHeaders headers = new HttpHeaders();
		//设置为form方式
		headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
		MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>();
		JSONObject request = new JSONObject();
		request.put("caseNo", caseNo);

		map.add("data", request.toJSONString());
		HttpEntity<MultiValueMap<String, String>> requestb = new HttpEntity<MultiValueMap<String, String>>(map,
				headers);
		ResponseEntity<String> response = restTemplate.postForEntity(apnMessageUrl, requestb, String.class);

payLoad方式

		HttpHeaders headers = new HttpHeaders();
		//定义请求参数类型,这里用json所以是MediaType.APPLICATION_JSON
		headers.setContentType(MediaType.APPLICATION_JSON);
		//RestTemplate带参传的时候要用HttpEntity<?>对象传递
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("userId", userId);
		HttpEntity<Map<String, Object>> request = new HttpEntity<Map<String, Object>>(map, headers);
		
		ResponseEntity<String> entity = restTemplate.postForEntity(url, request, String.class);


后台大致看了RestTemplate和HttpEntity,发现RestTemplate在执行postForObject方法的时候,会先根据请求参数和responseType构造一个HttpEntityRequestCallback对象。并且为这个对象的requestEntity赋值。所以请求参数一般为HttpEntity。

        private HttpEntityRequestCallback(Object requestBody, Type responseType) {
            super(responseType, null);
            if (requestBody instanceof HttpEntity) {
                this.requestEntity = (HttpEntity)requestBody;
            } else if (requestBody != null) {
                this.requestEntity = new HttpEntity(requestBody);
            } else {
                this.requestEntity = HttpEntity.EMPTY;
            }

        }
private final HttpEntity<?> requestEntity;

而HttpEntity的几个构造器如下,

 protected HttpEntity() {
        this((Object)null, (MultiValueMap)null);
    }

    public HttpEntity(T body) {
        this(body, (MultiValueMap)null);
    }

    public HttpEntity(MultiValueMap<String, String> headers) {
        this((Object)null, headers);
    }

    public HttpEntity(T body, MultiValueMap<String, String> headers) {
        this.body = body;
        HttpHeaders tempHeaders = new HttpHeaders();
        if (headers != null) {
            tempHeaders.putAll(headers);
        }

        this.headers = HttpHeaders.readOnlyHttpHeaders(tempHeaders);
    }

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值