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

3

我有一个登录表单,包含名称和密码两个值。我将这些值传递给我的REST服务。我使用FormParam注释在我的REST服务中获取这些值。但是我的要求是将这些值作为类获取。我尝试了以下方法。但它无法工作并显示编译时错误:@Form无法解析为类型。

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

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


尝试使用@BeanParam代替@Form,这样你的User类上的@FormParam注释应该可以正常工作。文档。我现在没有时间测试它。如果它对你有效,请告诉我。如果是这样,我会把这个作为答案发布。 - toniedzwiedz
@Tom,编译错误:无法将BeanParam解析为类型。 - Selva
你使用的是哪个JAX-RS实现?另外,它的版本是多少? - toniedzwiedz
好的,我认为这个注释在这个早期版本中不可用。恐怕您必须单独提取这些参数并显式构造一个“用户”对象。或者换成较新版本的Jersey也是一个选择? - toniedzwiedz
您也可以尝试本博客中描述的方法(http://avianey.blogspot.com/2011/12/exception-mapping-jersey.html),请查看上下文对象注入部分。 - toniedzwiedz
你尝试过请求参数吗? - Kishan Bheemajiyani
2个回答

1
即使是复合的Java对象,您仍需要使用@RequestParam。所以请更改为:
 public String login(@Form User form) 

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

您只需要从客户端发送用户详细信息,参数为“form”。


编译错误:RequestParam 无法解析为类型。 - Selva
@Madhesh 导入 javax.ws.rs.RequestParam; - Juned Ahsan
@junad,import javax.ws.rs.RequestParam; 这个注解在javax.ws.rs包中不存在。我正在使用Jersey版本1.16。 - Selva
@Madhesh 确实是这样,请检查您的 JAR 包。 - Juned Ahsan

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>

如果使用Jackson 2.x及以上版本,则只需添加Jackson 2.x的jar包。上述片段不需要在web.xml中。


严重错误:未找到Java类my.first.rest.User和Java类型my.first.rest.User的消息体读取器,以及MIME媒体类型application/x-www-form-urlencoded。 - Selva
你是否已经在 User 类上添加了 @XmlRootElement 注解? - Pramod Karandikar
你能检查一下这个问题的被接受答案吗? https://dev59.com/a2sz5IYBdhLWcg3wiIWe - Pramod Karandikar
我从HTML调用RESTful。 - Selva
如果您正在使用Maven,请尝试添加jersey-json的依赖项。<dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-json</artifactId> <version>1.17.1</version> </dependency>根据您的Jersey版本检查版本号。 - Pramod Karandikar
让我们在聊天中继续这个讨论。点击此处进入聊天室 - Pramod Karandikar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接