実現したいこと
YahooApiを使ってキーワードをSystem.out.printlnでコンソールに提示したい
API:https://jlp.yahooapis.jp/KeyphraseService/V2/extract
前提
作ったプログラムでこのようにリクエストしているのが、このりくえすとはそもそもあっているのか。
Request{method=POST, url=https://jlp.yahooapis.jp/KeyphraseService/V2/extract, tag=null}
最近SE業界に入ったのでそもそも仕組みがわからない。
Web画面には、
タイプ ステータスレポート
メッセージ HTTPのGETメソッドは、このURLではサポートされていません。
説明 リクエストラインで受信されたメソッドは、オリジンサーバーによって認識されますが、ターゲットリソースによってサポートされていません。
発生している問題・エラーメッセージ
Web画面 タイプ ステータスレポート メッセージ HTTPのGETメソッドは、このURLではサポートされていません。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー コンソール Request{method=POST, url=https://jlp.yahooapis.jp/KeyphraseService/V2/extract, tag=null} failed
説明 リクエストラインで受信されたメソッドは、オリジンサーバーによって認識されますが、ターゲットリソースによってサポートされていません。
試したこと
postリクエストはできているが成功していない。
Request{method=POST, url=https://jlp.yahooapis.jp/KeyphraseService/V2/extract, tag=null}
とコンソールにでてくる。
ただ、サーブレットのdoGetをdoPostに帰ると、エラーメッセージでこのGetメソッドは許されていませんと出る。また、レスポンスがうまく帰ってきていない。
elseで、System.out.println("failed");を書いたら、コンソールにfailedとなっていた。
try (
Response httpResponse = client.newCall(httpRequest).execute()) {
// レスポンスの処理
if (httpResponse.isSuccessful()) {
String responseBody = httpResponse.body().string();
//サーブレットのレスポンスに対して、取得したJSON形式のレスポンスボディを抽出
response.getWriter().println("Response: " + responseBody);
System.out.println("Success");
System.out.println(responseBody);
} else {
response.getWriter().println("Request failed with code: " + httpResponse.code());
System.out.println("failed");
補足情報(FW/ツールのバージョンなど)
サーブレットで作っているが、サーブレットとjspで作ってポストリクエスト、ポストでJSONが返ってくるようにしたほうがいい?そもそも方針を変えたほうがいいのか。お願いします。
該当のソースコード
java
1コード 2``` 3import java.io.IOException; 4import javax.servlet.ServletException; 5import javax.servlet.annotation.WebServlet; 6import javax.servlet.http.HttpServlet; 7import javax.servlet.http.HttpServletRequest; 8import javax.servlet.http.HttpServletResponse; 9 10import okhttp3.MediaType; 11import okhttp3.OkHttpClient; 12import okhttp3.Request; 13import okhttp3.RequestBody; 14import okhttp3.Response; 15 16@WebServlet("/YahooTestDemo") 17public class YahooTestDemo extends HttpServlet { 18 private static final long serialVersionUID = 1L; 19 20 public YahooTestDemo() { 21 super(); 22 } 23 24 protected void doGet(HttpServletRequest request, HttpServletResponse response) 25 throws ServletException, IOException { 26 response.setContentType("text/html; charset=UTF-8"); 27 28 // JSONデータ 29 String json = 30 "{\r\n" 31 + " \"id\": \"dj00aiZpPTlFbHhqcnVzRWk3byZzPWNvbnN1bWVyc2VjcmV0Jng9N2M-\",\r\n" 32 + " \"jsonrpc\" : \"2.0\",\r\n" 33 + " \"method\" : \"jlp.keyphraseservice.extract\",\r\n" 34 + " \"params\" : {\r\n" 35 + " \"q\" : \"東京ミッドタウンから国立新美術館まで歩いて5分で着きます。\"\r\n" 36 + " }\r\n" 37 + "}"; 38 // System.out.println(json); 39 // メディアタイプとリクエストボディの作成 40 MediaType mediaType = MediaType.parse("application/json; charset=utf-8"); 41 RequestBody requestBody = RequestBody.create(mediaType, json); 42 // リクエストの作成 43 44 //ここでPOSTリクエストしている。 45 Request httpRequest = new Request.Builder() 46 .url("https://jlp.yahooapis.jp/KeyphraseService/V2/extract") 47 .post(requestBody)//POSTに設定している。 48 .build(); 49 50 System.out.println(httpRequest); 51 System.out.println(requestBody); 52 53 // OkHttpClientを使用してリクエストを送信 54 55 56 OkHttpClient client = new OkHttpClient(); 57 try ( 58 Response httpResponse = client.newCall(httpRequest).execute()) { 59 // レスポンスの処理 60 if (httpResponse.isSuccessful()) { 61 String responseBody = httpResponse.body().string(); 62 //サーブレットのレスポンスに対して、取得したJSON形式のレスポンスボディを抽出 63 response.getWriter().println("Response: " + responseBody); 64 System.out.println("Success"); 65 System.out.println(responseBody); 66 } else { 67 response.getWriter().println("Request failed with code: " + httpResponse.code()); 68 System.out.println("failed"); 69 } 70 } catch (Exception e) { 71 e.printStackTrace(); 72 } 73 } 74} 75 76``` 77

回答1件
あなたの回答
tips
プレビュー