如何使用RestTemplate发送含多对象请求体及认证头的请求
使用RestTemplate发送带指定请求体与请求头的POST请求
步骤说明与代码示例
1. 实例化各层级实体类
假设你的实体类结构与请求JSON完全对应:
- 顶层类(如命名为
ApiRequest):包含Request类型的request属性 Request类:包含Header类型的header和Payload类型的payload属性Header类:包含correlationId、appId字段Payload类:包含leadId、applicationNo、proposalNo、policyNo、issuanceDt、docName、docType字段
直接创建并填充实体对象:
// 构建Header Header header = new Header(); header.setCorrelationId("Test"); header.setAppId("12345"); // 构建Payload Payload payload = new Payload(); payload.setLeadId("12345"); payload.setApplicationNo(""); payload.setProposalNo("P123"); payload.setPolicyNo("100"); payload.setIssuanceDt("01-06-2022"); payload.setDocName("ABCD.pdf"); payload.setDocType("Proposal Form"); // 构建Request Request request = new Request(); request.setHeader(header); request.setPayload(payload); // 构建顶层请求对象 ApiRequest apiRequest = new ApiRequest(); apiRequest.setRequest(request);
2. 配置请求头
创建HttpHeaders对象,指定Content-Type并添加username、password请求头:
HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); headers.add("username", "你的实际用户名"); headers.add("password", "你的实际密码");
3. 封装请求实体
将请求体与请求头包装为HttpEntity:
HttpEntity<ApiRequest> requestEntity = new HttpEntity<>(apiRequest, headers);
4. 发送POST请求
通过RestTemplate发送请求,这里以postForObject为例(如需响应头信息可改用postForEntity):
// 初始化RestTemplate(若已通过Spring容器注入可直接使用) RestTemplate restTemplate = new RestTemplate(); // 目标接口URL String targetUrl = "https://你的目标接口地址"; // 发送请求并接收响应,替换ResponseType为实际响应实体类 ResponseType response = restTemplate.postForObject(targetUrl, requestEntity, ResponseType.class);
注意事项
- 若实体类字段名与JSON键名不匹配,需用
@JsonProperty注解指定映射关系 - 若日期字段为
LocalDate类型,需配置RestTemplate的ObjectMapper以支持dd-MM-yyyy格式序列化:
ObjectMapper objectMapper = new ObjectMapper(); objectMapper.registerModule(new JavaTimeModule()); objectMapper.setDateFormat(new SimpleDateFormat("dd-MM-yyyy")); restTemplate.getMessageConverters().stream() .filter(converter -> converter instanceof MappingJackson2HttpMessageConverter) .forEach(converter -> ((MappingJackson2HttpMessageConverter) converter).setObjectMapper(objectMapper));
内容的提问来源于stack exchange,提问作者Abhishikth
相关产品推荐
相关产品推荐

