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(); // 后面的省略了... }
変更