休息轻松只接受表格数据

时间:2016-05-19 14:50:09

标签: web-services rest resteasy

我正在使用Rest Easy 3.0和Spring开发休息Web服务。我创造了 像这样的一项服务

    @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吗?

1 个答案:

答案 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等仲裁类型才有效。