任何人都可以帮助我。
我使用带有wildfly 8.1.0的resteasy创建了一个Web服务,但@FormParam始终返回null。
UserService.java
Path("/user")
@Produces(MediaType.APPLICATION_JSON)
public class UserService {
@POST
@Produces(MediaType.APPLICATION_JSON)
@Path("/create")
public String create(@FormParam("first_name") String firstName, @FormParam("last_name") String lastName,
@FormParam("email") String email, @FormParam("username") String username,
@FormParam("password") String password, @FormParam("address") String address,
@FormParam("country") String country, @FormParam("zip") String zip, @FormParam("ssnlast4") String ssnlast4,
@FormParam("mobile") String mobile, @FormParam("dob_month") String dobMonth,
@FormParam("dob_year") String dobYear, @FormParam("reg_type") String regType,
@FormParam("avatar") String avatar) {
String str = firstName + ":" + lastName + ":" + email + ":" + username + ":" + password + ":" + address + ":" + country + ":" + zip+ ":" + ssnlast4 + ":" + mobile;
return str;
}
}
我使用POSTMAN
来测试服务。
返回{null:null:null:null:null:null:null:null:null:null}
感谢。我很感激。
答案 0 :(得分:11)
@FormParam
适用于application/x-www-form-urlencoded
内容类型。您在Postman中选择的 form-data 按钮将创建多个部分数据。这是两种不同的动物。
如果您希望您的示例有效,则应选择 x-www-form-urlencoded 按钮,然后开始添加键/值对。密钥将是注入值的@FormParam("key")
。
此外,我会使用@Consumes(MediaTyp.APPLICATION_FORM_URLENCODED)
对您的方法进行注释,以便任何内容类型不是application/x-www-form-urlencoded
的请求都会失败。
如果您确实想要使用multipart,那么这是一个不同的故事。如果你确认这是你想要的,我们可以走这条路。我不认为它在这里很有用。
顺便说一下,你可以点击预览按钮,你会发现每种类型的发送方式主要区别
答案 1 :(得分:0)
在我们的案例中ContainerRequestFilter.filter(ContainerRequestContext)
正在调用containerRequestContext.getEntityStream()
似乎刷新缓冲区,这导致@FormParams
为空。
作为解决方案,我们在header(ContainerRequestContext.getHeaders())
中使用ajax请求发送身份验证令牌,该请求不处理EntityStream
。
答案 2 :(得分:0)
我也会遇到同样的问题,因为
@FormParam(“name”)字符串名称
这两个地方我们应该放置相同的标识符,否则会出错。