RestTemplate发送post请求报错415

很久没用restTemplate发送http请求了,今天写代码需要就又复习了一遍

JSONObject j = restTemplate.postForEntity(url,param,JSONObject.class);
参数1:请求的地址
参数2:请求体
参数3:请求响应类型

public class Test{

	@Autowired
	// 注意springboot没有自动注入该类需要自行注入
	private RestTemplate restTemplate;
	public void show(){
	HttpHeaders httpHeaders = new HttpHeaders();
	// 这是设置请求头的类型
	httpHeaders.add("accept",MediaType.APPLICATION_JSON_UTF8)
	
	// 这里setContentType是设置请求体的类型
	httpHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8);
	
	// 创建请求体载体
	MultiValueMap<String,Object> multiValueMap2 = 
									new LinkedMultiValueMap<>();
	multiValueMap2.add("key",value);

	// 使用httpEntity装载请求头和请求体 
	HttpEntity httpEntity = 
					new HttpEntity<>(multiValueMap2,httpHeaders);
	restTemplate.postForEntity(url,httpEntity,JSONObject.class);
	}
}
注意:请求体类型设置是根据请求接口的consumer类型决定如:
@PostMapping(value = "/createItem", 
		// 当前接口可以接受的请求体类型
		consumes = MediaType.APPLICATION_JSON_VALUE, 
		// 当前接口返回的类型
		produces = MediaType.APPLICATION_JSON_VALUE)

一般415报错都是请求的接口不支持本次请求体类型导致

注意:MulitValueMap<String,Object>这里的泛型很讲究!

// 如果泛型是MulitValueMap<String,Object>那么设置参数
mulit.add("item","123");
mulit.add("item2",new String[]{"123","234"});
// 通过日志可以发现传递的请求体是这样的,会转成数组接收方很大可能会报错400
{"item":["123"],"item2":["["123","234"]"]}

// 具体的原因可以看下他的继承关系就明白了,继承了Map<String,List<V>>
public interface MultiValueMap<K, V> extends Map<K, List<V>> {...}

// 解决办法
Map<String,Object> map = new HashMap<>();
map.put("item","213");
map.put("item2",new String[]{"123","234"});
HttpHeaders head = new Header();
// 相关头信息的插入
head.put........
HttpEntity httpEntity = 
		new HttpEntity<>(JSONObject.toJSONString(map),header);
// 这样传参就没问题了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值