我有一个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;
....
}
答案 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并稍后在函数中对其进行解析。