我有一个带有两个值名称和密码的登录表单。我将这个值传递给我的休息服务。我使用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>
如何将表单值作为对象接收?
答案 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