从HTML表单中在spring-boot REST请求参数中获得null

10 浏览
0 Comments

从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;
    ....
}

0
0 Comments

问题的出现原因是在Spring Boot的REST请求参数中,无法从HTML表单中获取到null值。解决方法是更改Content-Type为MediaType.APPLICATION_JSON_VALUE,并添加@RequestBody注解。同时,确保从浏览器发送请求时URL和content-type正确。如果从浏览器发送请求,应该发送application/json。如果做出以上更改后仍然出现错误,可以参考stackoverflow.com上的这篇帖子,在Ajax调用中添加content-type和Accept头。

0
0 Comments

问题出现的原因是请求参数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表单获取空值的问题。

0