2016-05-19 9 views
0

私はRest Easy 3.0とSpringを使ってレストウェブサービスを開発しています。私はこのRest簡単にフォームデータのみを受け入れる

@POST 
    @Path("add-user") 
    @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.APPLICATION_FORM_URLENCODED}) 
    @Produces({MediaType.APPLICATION_JSON}) 
    public String saveUser(@Form User user); 

よう つのサービスを作成していると私はそれが完璧に動作しますが、私はJSONまたはXMLデータを提出するとき、それは動作しません形成し送信すると、これは

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlRootElement(name="user") 
public class User { 

    @FormParam("username") 
    @XmlElement(name="username") 
    String username; 

    @FormParam("password") 
    @XmlElement(name="password") 
    String password; 

    public String getUsername() { 
     return username; 
    } 
    public void setUsername(String username) { 
     this.username = username; 
    } 
    public String getPassword() { 
     return password; 
    } 
    public void setPassword(String password) { 
     this.password = password; 
    } 
} 

私のBeanクラスです。しかし、@Formアノテーションを削除した場合、JSONとXMLでは動作しますが、フォームでは機能しません。

すべてのFORM、XML、およびJSONで動作する方法はありますか?

+0

'@ Beanparam'はフォームでのみ動作します –

+0

追加のメソッドを作成することもできます...オプションですか? –

+0

いいえ、オプションではありません。私はただ一つのリソースがすべてのタイプの入力を受け入れるようにしたい。 –

答えて

1

あなたが望むものを達成するための簡単な方法は異なる方法を持っている:

@POST 
@Path("add-user") 
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) 
public String saveUser(User user); 

@POST 
@Path("add-user") 
@Consumes({ MediaType.APPLICATION_FORM_URLENCODED }) 
public String saveUser(@FormParam("username") String username, 
         @FormParam("password") String password); 

application/x-www-form-urlencodedメディアタイプはFormMultivaluedMap@FormParamで動作します。 Userのような仲裁判断タイプは、カスタムMessageBodyReaderの実装を提供する場合にのみ機能します。

関連する問題