REST @FormParam为null

时间:2014-11-17 07:36:33

标签: java rest jersey jax-rs form-parameter

我将以下内容从浏览器传递到服务器

Status Code:204 No Content
Request Method:POST
Content-Type:application/x-www-form-urlencoded
Form Data
  json:{"clientName":"PACK","status":"success","message":"successful!"}

并在jsp代码中

var loginData = {
    clientName: cList,
    status: "success",
    message: "successful!"
};

$.ajax({
        url: subUrl,
        type: 'POST',
        contentType : "application/x-www-form-urlencoded",
        data: {
            json: JSON.stringify(loginData)
        },
        success: function (data) {
            handleLoginResult(data);
        }
    });

在Java代码中我有

@POST
public Object persistResetPasswordLogs(@FormParam("clientName")
    String clientName) {

    try {

        log.info("in rest method ??? "+clientName);
        .......
        .......

在服务器中,我将clientName视为null。

这可能是什么原因以及如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

AFAIK,没有Jersey(JAX-RS)机制将JSON解析为表单数据。表格数据应采用类似

的形式
firstName=Stack&lastName=Overflow (or in your case clientName=someName)

其中firstNamelastName通常是表单输入元素中的name属性值。您可以使用jQuery轻松序列化字段值,只需一个serialize()方法。

所以你可能会看到更像

这样的东西
<form id="post-form" action="/path/to/resource">
    Client Name: <input type="text" name="clientName"/>
</form>
<input id="submit" type="button" value="Submit"/>
<script>
    $("#submit").click(function(e) {
        $.ajax({
            url: $("form").attr("action"),
            data: $("form").serialize(),
            type: "post",
            success: processResponse,
            contentType: "application/x-www-form-urlencoded"
        });
    });
    function processResponse(data) {
        alert(data);
    }
</script>

答案 1 :(得分:1)

您是否定义了这样的Requestmapping:

@POST
@Path("/submitclient") // your request mapping for 'subUrl'
public Object persistResetPasswordLogs(@FormParam("clientName") String clientName)

和html:

<form action="submitclient" method="post">
    ...
</form>

另请查看您的json对象。我相信你应该发送这样的东西:

var loginData = {
    clientName: "dit" // get it from input
};