1

私はRESTfulを初めて使用し、voidメソッドでPOSTを実現するサンプルサービスを作成しようとしています。String クラスのメソッドをテストすることはできますが、カスタム オブジェクトでのテスト中に例外が発生します。

サービスクラス:

@Override
@POST
@Path("/sayHello")
public void sayHello(Person person) {
    System.out.println("Hello there, " + person.getName());         
}

@Override
@POST
@Path("/sayHi")
public void sayHi(String name) {
    System.out.println("Hey there, " + name);       
}   

テスト クライアント:

public void testSayHelloRest() throws Exception { 
    WebClient client = WebClient.create("http://localhost:8080/ServicesTutorial/sampleService/sayHello");
    Person p = new Person();
    p.setName("My Name");           
    client.post(p);
   }

public void testSayHi() throws Exception {    
    WebClient client = WebClient.create("http://localhost:8080/ServicesTutorial/sampleService/sayHi");  
    client.post("My Name"); 
}

単純な文字列入力による 2 番目のテストはパスしますが、最初のテストは以下の例外で失敗します

org.apache.cxf.interceptor.Fault: .No message body writer has been found for class : class com.wk.services.data.Person, ContentType : application/xml.

人物クラス

public class Person {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }       
}
4

1 に答える 1

2

Person クラスに次のように注釈を付ける必要があります。

@XmlRootElement(name="Person")
@XmlAccessorType(XmlAccessType.PUBLIC_MEMBER)
public class Person {
    private String name;

    @XmlElement (name = "name")
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }       
}
于 2013-05-18T14:36:12.963 に答える