日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Spring RestTemplate 之post请求

發(fā)布時(shí)間:2024/9/5 编程问答 39 如意码农
生活随笔 收集整理的這篇文章主要介紹了 Spring RestTemplate 之post请求 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

●post請求:在RestTemplate中,POST請求可以通過如下三個(gè)方法來發(fā)起,但post提交方式又有兩種 formData 和 payLoad,而且接口設(shè)計(jì)與傳統(tǒng)的瀏覽器使用的提交方式又有差異.所以很容易產(chǎn)生混淆。

formData和payLoad的區(qū)別:

當(dāng)POST請求的請求頭里設(shè)置Content-Type: application/x-www-form-urlencoded(默認(rèn)), 參數(shù)在請求體以標(biāo)準(zhǔn)的Form Data的形式提交,以&符號拼接,參數(shù)格式為key=value&key=value&key=value….

如果使用AJAX原生POST請求,請求頭里設(shè)置Content-Type:application/json,請求的參數(shù)會顯示在Request Payload中,參數(shù)格式為JSON格式:{“key”:”value”,”key”:”value”…},這種方式可讀性會更好。

第一種:postForEntity

@RequestMapping("/hello5")

public String getHello5() throws Exception {

Book book = new Book();

book.setName("水滸傳");

book.setPrice("200");

book.setAuthor("xxx");

book.setPublisher("xxxxxxxxxxxxx");

HttpHeaders headers = new HttpHeaders();

//這里設(shè)置的是以payLoad方式提交數(shù)據(jù),對于Payload方式,提交的內(nèi)容一定要是String,且Header要設(shè)為“application/json”

headers.setContentType(MediaType.APPLICATION_JSON_UTF8);

ObjectMapper mapper = new ObjectMapper();

String value = mapper.writeValueAsString(book);

HttpEntity<String> requestEntity = new HttpEntity<String>(value,

headers);

ResponseEntity<String> res = restTemplate.postForEntity(

"http://10.145.198.143:8081/ords/data_service/monitor/books",

requestEntity, String.class);

return res.getBody();

}

下面是以formData方式請求:

@RequestMapping("hello6")
    public String hello6() throws JsonProcessingException{
        //ResponseEntity<String> res = restTemplate.getForEntity("http://localhost/test/hello2", String.class);
        HttpHeaders header = new HttpHeaders();
        header.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        User u = new User();
        u.setName("rdb");
        u.setPasswd("abc123");
        ObjectMapper om = new ObjectMapper();
        String value = om.writeValueAsString(u);
        System.out.println(u.toString());
        System.out.println(value);
        HttpEntity<String> entity = new HttpEntity<String>(value,header);
        ResponseEntity<String> res = restTemplate.postForEntity("http://localhost/test/hello2", entity, String.class);
        return res.getBody();
    }

服務(wù)端接收參數(shù)總結(jié)說明:

@RequestParam :

A) 常用來處理簡單類型的綁定,通過Request.getParameter() 獲取的String可直接轉(zhuǎn)換為簡單類型的情況( 由String到 簡單類型的轉(zhuǎn)換操作由ConversionService配置的轉(zhuǎn)換器來完成);因?yàn)槭褂胷equest.getParameter()方式獲取參數(shù),所以可以處理get 方式中queryString的值,也可以處理post方式中 body data的值。
    B)用來處理Content-Type: 為 application/x-www-form-urlencoded編碼的內(nèi)容,提交方式GET、POST。(不設(shè)置這個(gè)屬性,好像這就是默認(rèn)值)
    C) 該注解有兩個(gè)屬性: value、required; value用來指定要傳入值的id名稱,required用來指示參數(shù)是否必須綁定。

在方法參數(shù)里面如是:public @ResponseBody JsonResult getPublishedToposByConnStreamId(@RequestParam(value = "streamId", required = false) String streamId) {}

@RequestBody
    A) GET、POST方式提時(shí), 根據(jù)request header Content-Type的值來判斷:
    application/x-www-form-urlencoded, 可選(即非必須,因?yàn)檫@種情況的數(shù)據(jù)@RequestParam, @ModelAttribute也可以處理,當(dāng)然@RequestBody也能處理);
    multipart/form-data, 不能處理(次類型多用來上傳文件類型---即使用@RequestBody不能處理這種格式的數(shù)據(jù),@RequestParam這個(gè)卻是可以處理的。);
    其他格式, 必須(其他格式包括application/json, application/xml等。這些格式的數(shù)據(jù),必須使用@RequestBody來處理);

B) PUT方式提交時(shí), 根據(jù)request header Content-Type的值來判斷:(表示沒見過put方式滴,可以無視吧。)
    application/x-www-form-urlencoded, 必須;
    multipart/form-data, 不能處理;
    其他格式, 必須;

結(jié)論:@RequestBody這個(gè)一般處理的是在ajax請求中聲明contentType: "application/json; charset=utf-8"時(shí)候。也就是json數(shù)據(jù)或者xml(我沒用過這個(gè),用的是json)

@RequestParam這個(gè)一般就是在ajax里面沒有聲明contentType的時(shí)候,為默認(rèn)的APPLICATION_FORM_URLENCODED格式時(shí),用這個(gè)。

第二種:postForObject

如果你只關(guān)注,返回的消息體,可以直接使用postForObject。用法和getForObject一致。

第三種:postForLocation

postForLocation也是提交新資源,提交成功之后,返回新資源的URI,postForLocation的參數(shù)和前面兩種的參數(shù)基本一致,只不過該方法的返回值為Uri,這個(gè)只需要服務(wù)提供者返回一個(gè)Uri即可,該Uri表示新資源的位置。

總結(jié)

以上是生活随笔為你收集整理的Spring RestTemplate 之post请求的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。