使用Spring RestTemplate对表单数据进行POST请求

时间:2019-09-26 09:59:31

标签: spring-boot spring-mvc

我必须向包含外部API的表单数据发出HTTP POST请求。目前,我正在使用以下curl命令调用API

curl https://books.zoho.com/api/v3/contacts?organization_id=10234695
-X POST
-H "Authorization: Zoho-oauthtoken 216793f385b9dd6e125f"
-H "Content-Type: application/x-www-form-urlencoded;charset=UTF-8"
-F 'JSONString="{
    "contact_name": "Bowman and Co",
    "company_name": "Bowman and Co",
    "website": "www.bowmanfurniture.com",
    "contact_type": "customer"
    }

我已经实现了ClientHttpRequestInterceptor接口,并向RestTemplate注册了拦截器。我不确定如何发布带有表单数据的HTTP请求。请让我知道如何提交表单数据或指向任何参考。

在我的Controller类中:

@RestController
@RequestMapping("/api/v1/contacts")
public class ContactController {

    @Autowired
    private RestTemplate restTemplate;

    @PostMapping("/")

    public Invoice createContact(@RequestBody Contact contact){
        //TODO
        return null;
    }
}

1 个答案:

答案 0 :(得分:1)

您可以使用rest模板通过表单数据发出发布请求。

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
MultiValueMap<String, String> map= new LinkedMultiValueMap<String, String>();
map.add("data", "data");

HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(map, headers);

ResponseEntity<String> response = restTemplate.postForEntity( url, request , String.class );

Spring将自动处理在这种情况下使用的消息转换器。(使用的消息转换器将是 FormHttpMessageConverter )。 阅读Doc