002から06-RestTemplate-例示的な要求 - 体、JSON、マルチパート、okhttp3

I.概要

  例要求セット

サーバー:https://github.com/bjlhx15/common-study.git  HTTP-クライアントでWebサーバ

サーバー:つまりコンテンツタイプを受信RequestBody:appliaction / jsonの受信

サーバー:RequestParamのパラメータのマッピング

1.1、フォームのフォーム

要求ヘッダー:コンテンツタイプ:application / x-www-form-urlencodedで

リクエスト方法:ポスト

テスト:  

  

要約:

  使用したパラメータ渡しモード:MultiValueMap <文字列、文字列> ValueMapの=新しいLinkedMultiValueMap()。

  パラメータの第二に渡し、使用:URL通常の転送パラメータ、オブジェクトの受信

  このような表示要求ヘッダーを設定しないようのみ直接のオブジェクトは、コンテンツタイプに設定されます:アプリケーション/ JSON。

    表示設定した場合、headers.add( "コンテンツタイプ" は、 "アプリケーション/ x-www-form-urlencodedで")。

        人の人= 新しい人(); 
        person.setName( "試験" )。
        person.setAge( 23 )。

        HttpHeadersヘッダー = 新しいHttpHeaders()。
        headers.add( "のContent-Type"、 "アプリケーション/ x-www-form-urlencodedで" )。
        HttpEntityエンティティ = 新しい HttpEntity(人、ヘッダ);  

    これは、異常として表示されます

HttpMessageConverterないため【com.github.bjlhx15.common.http.webserver.controller.Person]及びコンテンツタイプ[アプリケーション/ x-www-form-urlencodedで】

1.2、フォームのフォーム

リクエストヘッダ:コンテンツタイプ:アプリケーション/ JSON

リクエスト方法:ポスト

テスト:  

  

要約:

  使用したパラメータ渡しモード:オブジェクト・タイプ・パラメータは、サーバが必要RequestBodyを受信します

  パラメータの第二に渡し、使用:URL通常の転送パラメータ、オブジェクトの受信

  このような設定をデフォルトになり表示要求ヘッダーのContent-Typeを設定しないようのみ直接オブジェクトである:アプリケーション/ JSON。

1.3、マルチパートフォームのフォーム

要求ヘッダー:コンテンツタイプ:マルチパート/フォームデータ

リクエスト方法:ポスト

テスト:  

  

要約:

  パラメータ渡しモード、使用:MultiValueMap <文字列、文字列> ValueMapの=新しいLinkedMultiValueMap <>();正常なパラメータとファイルを転送することができます

  パラメータの第二に渡し、使用:URL通常の転送パラメータ、オブジェクトの受信

    @Test
     公共 ボイドuploadFileParam(){ 
        RestTemplate restTemplate2 = 新しい RestTemplate(新しいSimpleClientHttpRequestFactory())。
        // 设置请求头 
        HttpHeaders headers1 = 新しいHttpHeaders(); 
        headers1.setContentType(MediaType.MULTIPART_FORM_DATA)。

        MultiValueMap <文字列、オブジェクト> ValueMapの= 新しい LinkedMultiValueMap <> (); 
        FileSystemResource fileSystemResource = 新しい FileSystemResource(ファイル( "/ユーザ/ lihongxu6 / IdeaProjects /共通研究/共通HTTP / HTTPクライアントテスト/ターゲット/テストクラス/ test.txtの" )); 
        valueMap.add( "ファイル" 、fileSystemResource)。
        valueMap.add( "MSG"、 "DDDDDD" ); 
        HttpEntityエンティティ = 新しいHttpEntity(ValueMapの、headers1)。

        結果結果2 = restTemplate2.postForObject( "にhttp:// localhost:8080 /マルチ/ uploadFileParam"。、エンティティ、結果クラス)。
        System.out.println(結果2)。
    }

 

通常のパラメータの転送処理がコンテンツタイプを増加させるので、特別なサーバーの場合は、通常のリクエストパラメータを受信することができません。

次のようにokhttp3を使用することが可能です

@PostMapping( "アップロード" 公衆 WebResult <ImageUploadResult>(@RequestParam( "IMG"アップロード)MultipartFileファイル){
     最終 バイト[]バイト。
    試す{ 
        バイト = file.getBytesを(); 
    } キャッチ(IOExceptionを電子){ 
        log.warn( "ファイルを読み取ることができない" 、file.getOriginalFilename()、E)。
        返す 新しい WebResult <>(500、 "服务器错误、请稍后再试" ); 
    } 
    
    // 构造请求ボディ 
    MultipartBody本体= 新しいMultipartBody.Builder() 
            .setType(MultipartBody.FORM)
            .addFormDataPart( "名前"、 "bjlhx15"
            .addFormDataPart( "ファイル" 、バイト))
            .build(); 
 
    // 构造请求 
    リクエスト要求= 新しい Request.Builder()URL( "https://aaa.com/upload"。 
            .post(ボディ)
            .build(); 
    OkHttpClientクライアント = 新しいOkHttpClient.Builder()
            .sslSocketFactory(sslManager.getSocketFactory())
            .build(); 
    // 后面的省略了... 
}

 

 

 

変更

 

おすすめ

転載: www.cnblogs.com/bjlhx/p/11285974.html