Resteasy @FormParam返回null

时间:2015-01-15 06:07:07

标签: java-ee jax-rs resteasy wildfly-8

任何人都可以帮助我。

我使用带有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来测试服务。 enter image description here

返回{null:null:null:null:null:null:null:null:null:null}

感谢。我很感激。

3 个答案:

答案 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”)字符串名称

这两个地方我们应该放置相同的标识符,否则会出错。