如何在restful webservice中将表单参数作为对象获取

时间:2014-10-03 07:01:03

标签: java web-services rest jersey jax-rs

我有一个带有两个值名称和密码的登录表单。我将这个值传递给我的休息服务。我使用FormParam注释在我的休息服务中获得此值。但是,我的要求是将这些值作为一个类。我试过以下方法。但它不起作用并显示编译时错误: @Form cannot be resolved to a type.

@POST
@Path("login")
@Produces(MediaType.TEXT_PLAIN)
public String login(@Form User form) {
     return "Logged with " + form.email + " " + form.password;
}

public class User {

      @FormParam("email")
      private String email;

      @FormParam("password")
      private String password;

}

我的表单是

<form method="POST" action="rest/login">


Email Address: <input type="text" name="email">
<br>
Password: <input type="text" name="password">
<input type="submit">


</form>

如何将表单值作为对象接收?

2 个答案:

答案 0 :(得分:1)

即使它是复合Java对象,您也需要使用@RequestParam。所以改变这个

 public String login(@Form User form) 

 public String login(@RequestParam("form") User form)

您只需要在&#34;表单&#34;下发送用户详细信息来自客户的param。

答案 1 :(得分:0)

如果您的要求只是以对象形式提供数据,您可以通过传递JSON请求来调用您的ReST服务:

ReST方法

@POST
@Consumes(MediaType.APPLICATION_JSON)
public String login(User form) {
// access values from inputObject
form.getEmail();
form.getPassword();
}

用户类

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class User {

      private String email;
      private String password;

      //getters and setters

    }

您需要使用Jackson功能来克服MessageBody相关错误。如果您使用的是Jackson版本2.x,则需要在web.xml文件中注册Jackson功能。

<init-param>
    <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
    <param-value>true</param-value>
</init-param>

对于杰克逊版本2.x及以上版本,只添加杰克逊2.x罐子。 web.xml

中不需要上述代码段