質問編集履歴
5
Chatworkサポートデスクへの問い合わせ結果追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -83,6 +83,7 @@
|
|
83
83
|
|
84
84
|
### 試したこと
|
85
85
|
ファイルアップロードで使用したAPIトークンやRoomIDは以下のメッセージ送信処理では有効でしたので必要なパラメータは用意できていると判断しています。
|
86
|
+
Chatworkのサポートにアドバイスを求めるもAPIについてはサポート対象外とのこと...
|
86
87
|
|
87
88
|
|
88
89
|
|
4
レスポンスのログも追記しました
title
CHANGED
File without changes
|
body
CHANGED
@@ -107,4 +107,9 @@
|
|
107
107
|
テスト
|
108
108
|
--tQc3hQBjk3FyTcoV9i2q5WDRKyraUHhMY_1WPY--
|
109
109
|
]
|
110
|
+
```
|
111
|
+
|
112
|
+
### HTTPレスポンスのログ
|
113
|
+
```
|
114
|
+
[API:Response(5c1b57c0-228e-4c05-a605-92e019721ac5)] Status=[400:Bad Request], Headers=[[Content-Type:"application/json", Content-Length:"64", Connection:"keep-alive", Date:"Wed, 11 Dec 2019 10:25:45 GMT", x-amzn-RequestId:"01c2efde-74d2-46c2-ab03-3f3478abf844", x-amzn-ErrorType:"AccessDeniedException", x-amz-apigw-id:"EiOWeEQiNjMFnkg=", X-Cache:"Error from cloudfront", Via:"1.1 c6a9836e54cf7bc2bb59e3fb86f871e1.cloudfront.net (CloudFront)", X-Amz-Cf-Pop:"NRT20-C1", X-Amz-Cf-Id:"LgV5C-NNYcwt52lodk8KhLRct-35xCyLYPqG71tNqIQpoSxWGkHtCw=="]], Body=[{"errors":["Please upload the file with `multipart/form-data`"]}]
|
110
115
|
```
|
3
RestTemplateのHTTPリクエストログを載せました
title
CHANGED
File without changes
|
body
CHANGED
@@ -13,18 +13,7 @@
|
|
13
13
|
エンドポイントが要求している形でリクエストボディが作成できていないのか、ステータスコード400(Bad Request)でレスポンスされてしまいます。
|
14
14
|
何が不足しているのかわからず、、、確認すべき点や修正すべき箇所があればご指摘いただきたいです。
|
15
15
|
|
16
|
-
```
|
17
|
-
org.springframework.web.client.HttpClientErrorException$BadRequest: 400 Bad Request
|
18
|
-
at org.springframework.web.client.HttpClientErrorException.create(HttpClientErrorException.java:79) ~[spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]
|
19
|
-
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:122) ~[spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]
|
20
|
-
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:102) ~[spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]
|
21
|
-
at
|
22
|
-
.
|
23
|
-
.
|
24
|
-
.
|
25
16
|
|
26
|
-
```
|
27
|
-
|
28
17
|
### 該当のソースコード
|
29
18
|
|
30
19
|
```Kotlin
|
@@ -95,33 +84,8 @@
|
|
95
84
|
### 試したこと
|
96
85
|
ファイルアップロードで使用したAPIトークンやRoomIDは以下のメッセージ送信処理では有効でしたので必要なパラメータは用意できていると判断しています。
|
97
86
|
|
98
|
-
メッセージ送信API
|
99
|
-
[http://developer.chatwork.com/ja/endpoint_rooms.html#POST-rooms-room_id-messages](http://developer.chatwork.com/ja/endpoint_rooms.html#POST-rooms-room_id-messages)
|
100
87
|
|
101
|
-
```Kotlin
|
102
|
-
/**
|
103
|
-
* メッセージ 投稿.
|
104
|
-
*/
|
105
|
-
override fun post(message: String, roomID: ChatWorkRoomID, token: ChatWorkToken): Boolean {
|
106
|
-
// エンドポイント
|
107
|
-
val url = "https://api.chatwork.com/v2/rooms/${roomID}/messages"
|
108
88
|
|
109
|
-
// HTTPリクエストヘッダ作成
|
110
|
-
val headers = HttpHeaders()
|
111
|
-
headers.contentType = MediaType.APPLICATION_FORM_URLENCODED
|
112
|
-
headers.set("X-ChatWorkToken", token)
|
113
|
-
|
114
|
-
// HTTPリクエストボディ作成
|
115
|
-
val body: MultiValueMap<String, String> = LinkedMultiValueMap<String, String>()
|
116
|
-
body.add("body", message)
|
117
|
-
|
118
|
-
// リクエスト & レスポンス
|
119
|
-
val request = HttpEntity(body, headers)
|
120
|
-
val response = restTemplate.postForEntity(url, request, String::class.java)
|
121
|
-
return response.statusCode.is2xxSuccessful
|
122
|
-
}
|
123
|
-
```
|
124
|
-
|
125
89
|
### HTTPリクエストのログ
|
126
90
|
```
|
127
91
|
[API:Request(5c1b57c0-228e-4c05-a605-92e019721ac5)] Request=[POST:https://api.chatwork.com/v2/rooms/00000000/files], Headers=[[Accept:"text/plain, application/json, application/*+json, */*", Content-Type:"multipart/form-data;charset=UTF-8;boundary=tQc3hQBjk3FyTcoV9i2q5WDRKyraUHhMY_1WPY", X-ChatWorkToken:"***********", Content-Length:"9287"]], Body=[--tQc3hQBjk3FyTcoV9i2q5WDRKyraUHhMY_1WPY
|
@@ -129,5 +93,18 @@
|
|
129
93
|
Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
|
130
94
|
Content-Length: 8861
|
131
95
|
|
132
|
-
�k��q�:&zw����`Ⱥ%�e9v�7;�[f��nĠh]�����8x���X�V�� �u�2���b��ޒ��*���'�p�^ՉRI-
|
96
|
+
�k��q�:&zw����`Ⱥ%�e9v�7;�[f��nĠh]�����8x���X�V�� �u�2���b��ޒ��*���'�p�^ՉRI-����Y�������JҺ�*�W�˟��h�صF-��ߤ[�~��PK!��GI{docProps/core.xml
|
97
|
+
.
|
98
|
+
. 省略
|
99
|
+
.
|
133
|
-
�
|
100
|
+
��GI{�docProps/core.xmlPK-!EO�U�#-docProps/app.xmlPK
|
101
|
+
�
|
102
|
+
--tQc3hQBjk3FyTcoV9i2q5WDRKyraUHhMY_1WPY
|
103
|
+
Content-Disposition: form-data; name="message"
|
104
|
+
Content-Type: text/plain;charset=UTF-8
|
105
|
+
Content-Length: 9
|
106
|
+
|
107
|
+
テスト
|
108
|
+
--tQc3hQBjk3FyTcoV9i2q5WDRKyraUHhMY_1WPY--
|
109
|
+
]
|
110
|
+
```
|
2
RestTemplateのHTTP通信ログを載せました
title
CHANGED
File without changes
|
body
CHANGED
@@ -18,17 +18,7 @@
|
|
18
18
|
at org.springframework.web.client.HttpClientErrorException.create(HttpClientErrorException.java:79) ~[spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]
|
19
19
|
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:122) ~[spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]
|
20
20
|
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:102) ~[spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]
|
21
|
-
at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63) ~[spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]
|
22
|
-
at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:778) ~[spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]
|
23
|
-
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:736) ~[spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]
|
24
|
-
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:670) ~[spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]
|
25
|
-
at org.springframework.web.client.RestTemplate.postForEntity(RestTemplate.java:445) ~[spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]
|
26
|
-
at com.***.***.domain.service.api.chatwork.impl.ChatworkServiceImpl.post(ChatworkServiceImpl.kt:90) ~[main/:na]
|
27
|
-
at com.***.***.presentation.controller.DeliverySettingsController.test(DeliverySettingsController.kt:30) ~[main/:na]
|
28
|
-
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
|
29
|
-
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
|
30
|
-
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
|
31
|
-
at
|
21
|
+
at
|
32
22
|
.
|
33
23
|
.
|
34
24
|
.
|
@@ -80,7 +70,6 @@
|
|
80
70
|
// HTTPリクエストボディ作成
|
81
71
|
val fileHeaders = HttpHeaders()
|
82
72
|
fileHeaders.contentType = MediaType.parseMediaType(contentType)
|
83
|
-
fileHeaders.contentDisposition = ContentDisposition.parse("form-data")
|
84
73
|
val uploadFileData: Resource = object : ByteArrayResource(file.readBytes()) {
|
85
74
|
override fun getFilename(): String {
|
86
75
|
return file.name
|
@@ -93,6 +82,7 @@
|
|
93
82
|
val fileEntity = HttpEntity(uploadFileData, fileHeaders)
|
94
83
|
val body: MultiValueMap<String, Object> = LinkedMultiValueMap<String, Object>()
|
95
84
|
body.add("file", fileEntity as Object)
|
85
|
+
body.add("message", "テスト" as Object)
|
96
86
|
|
97
87
|
// リクエスト & レスポンス
|
98
88
|
val request = HttpEntity(body, headers)
|
@@ -130,4 +120,14 @@
|
|
130
120
|
val response = restTemplate.postForEntity(url, request, String::class.java)
|
131
121
|
return response.statusCode.is2xxSuccessful
|
132
122
|
}
|
133
|
-
```
|
123
|
+
```
|
124
|
+
|
125
|
+
### HTTPリクエストのログ
|
126
|
+
```
|
127
|
+
[API:Request(5c1b57c0-228e-4c05-a605-92e019721ac5)] Request=[POST:https://api.chatwork.com/v2/rooms/00000000/files], Headers=[[Accept:"text/plain, application/json, application/*+json, */*", Content-Type:"multipart/form-data;charset=UTF-8;boundary=tQc3hQBjk3FyTcoV9i2q5WDRKyraUHhMY_1WPY", X-ChatWorkToken:"***********", Content-Length:"9287"]], Body=[--tQc3hQBjk3FyTcoV9i2q5WDRKyraUHhMY_1WPY
|
128
|
+
Content-Disposition: form-data; name="file"; filename="template.xlsx"
|
129
|
+
Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
|
130
|
+
Content-Length: 8861
|
131
|
+
|
132
|
+
�k��q�:&zw����`Ⱥ%�e9v�7;�[f��nĠh]�����8x���X�V�� �u�2���b��ޒ��*���'�p�^ՉRI-ks�hG���#B��`�2�C�H�;asxd��7�
|
133
|
+
�X�#���F@Z�V�т#7�=;�E�ov�u�0��:���uZ�Ͳ�Ws7����gj�Q�`%�`��|����ll��
|
1
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
### 前提・実現したいこと
|
2
2
|
|
3
3
|
Kotlin+SpringBoot でサーバ内で生成したファイルを連携したチャットルームに投稿する機能を実装しています。
|
4
|
-
対象チャットツールはChatwork。
|
4
|
+
対象チャットツールはChatworkです。
|
5
5
|
ChatWorkAPIを叩く際のHTTPクライアントはSpring RestTemplateを利用しています。
|
6
6
|
|
7
7
|
実現したいことは以下のエンドポイントへのファイルアップロードです。
|