2016-05-19 41 views
0

我使用Rest Easy 3.0和Spring開發其他Web服務。我創建了一個 服務這樣Rest Easy只接受表格數據

@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); 

,這是我的bean類

@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; 
    } 
} 

當我提交的形式,它完美的作品,但是當我提交JSON或XML數據,它不工作。但是,如果我刪除@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工作。如果您提供自定義的MessageBodyReader實現,則只能使用User等任意類型的仲裁。