从HTML表单的Spring-boot REST请求参数中获取空值

时间:2019-12-10 11:39:47

标签: javascript java jquery spring-boot

我有一个HTML表单,其中有2个输入,这些输入已提交给spring boot REST api。但是在这个简单的应用程序中,我仍然在后端api中收到null作为请求。

表格

<div>
    <label>alphaID</label>  
    <div>
        <input id="alphaID" name="alphaID" type="text"/>
    </div>
</div>

<div>
    <label class="col-md-4 control-label">Domain Name</label>  
    <div class="col-md-4">
        <input id="domain" name="domain" type="text"/>
    </div>
</div>

提交后,我正在拨打ajax电话,例如:

function formSubmit() {
    $("#productForm").submit(function(e) {
        e.preventDefault();
        var requestJson = createRequestJSON();
        var url = config.myurl;
        $.ajax({
            url: url,
            type : "POST",
            data: JSON.stringify(requestJson),
            success: function( data, textStatus, jQxhr ) {
                console.log("sucess: " + data);
            },
            error: function( jqXhr, textStatus, errorThrown ){
                console.log( "error: " + errorThrown );
            }
        });
    });
}

后端是带有REST调用的Spring-boot应用程序:

@RequestMapping(value = "/validate", method = RequestMethod.POST,
        consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public Map<String, List<String>> validate(@Valid MyDTO myDTO) {

    System.out.println(myDTO.getId());          // GETTING null
    System.out.println(myDTO.getDomain());      // GETTING null

}

MyDTO.java

public class MyDTO {
    @JsonProperty("alpha_id")
    private String alphaID;

    @JsonProperty("domain")
    private String domain;

    ....
}

2 个答案:

答案 0 :(得分:1)

将您的Content-Type更改为

consumes = MediaType.APPLICATION_JSON_VALUE

添加@RequestBody注释

public Map<String, List<String>> validate(@Valid @RequestBody MyDTO myDTO)

确保您正在调用正确的URL并从浏览器请求中也发送正确的content-type

答案 1 :(得分:0)

看看您的requestJson是否实际上具有正确的格式以便MyDTO使用它,可能会很有趣。

您也不必Json.stringify数据。当您执行此操作时,基本上只是将一个字符串发送到后端。后端不知道必须解析此字符串以获取有效文档。您可以直接在data属性中直接发送JavaScript对象,也可以更改API以使用String并稍后在函数中对其进行解析。