2017-12-10 5 views
-2

私はちょうどRESTで作業を始めました。以下は私の完全なソースコードです。私はJSON型、プレーンテキスト(TEXT/PLAIN)型でさえ試みました。シンプルなPOSTリクエストによるサービスでHTTP 405エラーが発生しました:メソッドが許可されていません

package com.post; 

import javax.ws.rs.core.MediaType; 

import com.sun.jersey.api.client.Client; 
import com.sun.jersey.api.client.ClientResponse; 
import com.sun.jersey.api.client.WebResource; 

public class JerseyClientPost { 

    public static void main(String[] args) { 
     try{ 
     // TODO Auto-generated method stub 
    Client client = Client.create(); 
    WebResource r = client.resource("http://localhost:8080/PostExample/rest/priya/metallica/post"); 
    String input = "{\"singer\":\"Metallica\",\"title\":\"Fade To Black\"}"; 
    ClientResponse resp = r.accept(MediaType.TEXT_PLAIN).post(ClientResponse.class, input); 
    if (resp.getStatus() != 201) { 
     throw new RuntimeException("Failed : HTTP error code : " 
      + resp.getStatus()); 
    } 

    System.out.println("Output from Server .... \n"); 
    String output = resp.getEntity(String.class); 
    System.out.println(output); 

} catch (Exception e) { 

    e.printStackTrace(); 

} 
} 


    } 

リソース:

package com.post; 

import javax.ws.rs.*; 
import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.Response; 

@Path("/priya/metallica") 
public class JSONService { 

    @POST 
    @Path("/post") 
    @Consumes(MediaType.TEXT_PLAIN) 
    public Response createTrackInJSON(Track track) { 

     String result = "Track saved : " + track; 
     return Response.status(201).entity(result).build(); 

    } 
} 

POJOクラス:

package com.post; 

public class Track { 

    private String singer; 
    private String title; 

    public String getSinger(){ 
     return singer; 
    } 
    public void setSinger(String singer){ 
     this.singer=singer; 
    } 
    public String getTitle(){ 
     return title; 

    } 
    public void setTitle(String title){ 
     this.title =title; 
    } 

} 
01それでも

HTTP 405 method not allowed.

JerseyClientを取得

のweb.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 
    <display-name>PostExample</display-name> 
<servlet> 
<servlet-name>jersey-serlvet</servlet-name> 
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
<init-param> 
<param-name>com.sun.jersey.config.property.packages</param-name> 
<param-value>com.post</param-value> 
</init-param> 

<load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
<servlet-name>jersey-serlvet</servlet-name> 
<url-pattern>/rest/*</url-pattern> 
</servlet-mapping> 
</web-app> 

私はPOJO /リソース/クライアントに対応するアノテーションを使用しますが、同じHTTP 405エラーが発生したことにより、あまりにもXML形式で試してみました。

+0

http://idownvotedbecau.se/toomuchcode/ – vinS

+0

@vinSここですべてが問題を解析するために必要とされます。 – chrylis

+0

ご質問の中で具体的にご記入ください。コード全体を投稿することは誰にも役立ちません。 – vinS

答えて

0

私が知っているように、application/jsonオブジェクトは、オブジェクトが渡されるときに使用する必要があります。だから、私はコード全体でそれを使用し、client.produceでも同様に使用します。

0

上記の手順を試してみてください。

  1. 変更このコード ClientResponseレスポンスJSON POSTリクエストの使用を作成するためのコードの下に残り、クライアントの使用ではJSON(@Consumes(MediaType.ApplicationJson))へのプレーンテキストから消費
  2. = webResource.type( "application/json") .post(ClientResponse.class、input);
    1. 郵便配達員のような外部のレストクライアントからサービスを呼び出すと、どうすれば が表示されるかを確認してください。
    2. 最も重要なことは「トラック」という名前のBeanのインターフェイスserialiazableを実装してください
関連する問題