Resteasy @FormParam returns 始终为空
Resteasy @FormParam returns always null
谁能帮我解决这个问题。
我使用 resteasy 和 wildfly 8.1.0 创建了一个网络服务,但是 @FormParam 总是 returns 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
来测试服务。
return 将是 {null:null:null:null:null:null:null:null:null:null}
谢谢。我很感激。
@FormParam
适用于 application/x-www-form-urlencoded
内容类型。您在 Postman 中 select 编辑的 form-data 按钮将创建多部分数据。这是两种不同的动物。
如果您希望您的示例有效,您应该 select x-www-form-urlencoded 按钮,然后开始添加 key/value 对。键将是注入值的 @FormParam("key")
。
此外,我会用 @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
注释您的方法,这样任何内容类型不是 application/x-www-form-urlencoded
的请求都会失败。
如果您确实想使用多部分数据,那就另当别论了。如果您确认那是您想要的,我们可以沿着这条路走下去。不过我不认为它在这里有用。
顺便说一句,您可以单击 预览 按钮,您将看到每种类型的发送方式在正文中的主要区别。
在我们的例子中 ContainerRequestFilter.filter(ContainerRequestContext)
正在调用 containerRequestContext.getEntityStream()
似乎刷新缓冲区,这导致 @FormParams
为空。
作为解决方案,我们在 header(ContainerRequestContext.getHeaders())
中通过 ajax 请求发送身份验证令牌,不处理 EntityStream
.
我也会遇到同样的问题因为
@FormParam("name") 字符串名称
两个地方我们应该放相同的标识符,否则会报错。
谁能帮我解决这个问题。
我使用 resteasy 和 wildfly 8.1.0 创建了一个网络服务,但是 @FormParam 总是 returns 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
来测试服务。
return 将是 {null:null:null:null:null:null:null:null:null:null}
谢谢。我很感激。
@FormParam
适用于 application/x-www-form-urlencoded
内容类型。您在 Postman 中 select 编辑的 form-data 按钮将创建多部分数据。这是两种不同的动物。
如果您希望您的示例有效,您应该 select x-www-form-urlencoded 按钮,然后开始添加 key/value 对。键将是注入值的 @FormParam("key")
。
此外,我会用 @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
注释您的方法,这样任何内容类型不是 application/x-www-form-urlencoded
的请求都会失败。
如果您确实想使用多部分数据,那就另当别论了。如果您确认那是您想要的,我们可以沿着这条路走下去。不过我不认为它在这里有用。
顺便说一句,您可以单击 预览 按钮,您将看到每种类型的发送方式在正文中的主要区别。
在我们的例子中 ContainerRequestFilter.filter(ContainerRequestContext)
正在调用 containerRequestContext.getEntityStream()
似乎刷新缓冲区,这导致 @FormParams
为空。
作为解决方案,我们在 header(ContainerRequestContext.getHeaders())
中通过 ajax 请求发送身份验证令牌,不处理 EntityStream
.
我也会遇到同样的问题因为
@FormParam("name") 字符串名称
两个地方我们应该放相同的标识符,否则会报错。