从HTML表单中在spring-boot REST请求参数中获得null
从HTML表单中在spring-boot REST请求参数中获得null
我有一个HTML表单,在这个表单中我有两个输入框,提交后将数据发送到一个Spring Boot的REST API。但是在这个简单的应用中,后端API仍然接收到null作为请求。
表单:
在提交时,我调用了一个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 ); } }); }); }
后端是一个Spring Boot应用程序,有一个REST调用:
@RequestMapping(value = "/validate", method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE) public Map> validate(@Valid MyDTO myDTO) { System.out.println(myDTO.getId()); // 获得null System.out.println(myDTO.getDomain()); // 获得null }
MyDTO.java:
public class MyDTO { @JsonProperty("alpha_id") private String alphaID; @JsonProperty("domain") private String domain; .... }
问题出现的原因是请求参数requestJson
的格式不正确,导致MyDTO
无法解析它。此外,不需要对数据进行Json.stringify
操作,这样做只会发送一个字符串给后端,后端无法解析该字符串为有效的文档。可以直接将JavaScript对象直接发送到数据属性中,或者更改API,使其预期接收一个字符串,并在后续的函数中进行解析。
解决方法:
1. 确保requestJson
的格式正确,以便MyDTO
能够正确解析。
2. 不需要对数据进行Json.stringify
操作,直接将JavaScript对象发送到数据属性中。
或者
3. 更改API,使其预期接收一个字符串,并在后续的函数中解析。
代码示例:
// 直接发送JavaScript对象 $.ajax({ url: '/your-url', type: 'POST', data: { key1: value1, key2: value2 }, success: function(response) { // 处理成功的回调函数 }, error: function(error) { // 处理错误的回调函数 } }); // 更改API预期接收一个字符串,并在后续的函数中解析 $.ajax({ url: '/your-url', type: 'POST', data: JSON.stringify({ key1: value1, key2: value2 }), success: function(response) { // 处理成功的回调函数 }, error: function(error) { // 处理错误的回调函数 } });
通过以上解决方法,可以避免在spring-boot REST请求中从HTML表单获取空值的问题。