Spring MVC 处理 AJAX 请求

Spring MVC handling AJAX request

我在处理 Spring 控制器和 AJAX 请求时遇到问题。我需要使用 JSON 对象作为参数,但没有 @RequestBody 注释我收到空值,代码示例:

@RequestMapping(value="/meals/new", method=RequestMethod.GET,
        produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public List<Item> autocomplete(String autocomplete) {
    System.out.println(autocomplete);
        return null;
}

问题是自动完成变量为空,而不是 return。

当我使用 @RequestBody 方法时根本没有被调用并且我得到状态代码 400,控制器示例:

@RequestMapping(value="/meals/new", method=RequestMethod.GET,
        produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public List<Item> autocomplete(@RequestBody Autocomplete autocomplete) {
    System.out.println(autocomplete.getValue());
        return null;
}

这是自动完成模型:

@JsonInclude(JsonInclude.Include.NON_NULL)
@Generated("org.jsonschema2pojo")
@JsonPropertyOrder({
    "value"
 })
 public class Autocomplete {

@JsonProperty("value")
private String value;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();

/**
 *
 * @return
 * The value
 */
@JsonProperty("value")
public String getValue() {
    return value;
}

/**
 *
 * @param value
 * The value
 */
@JsonProperty("value")
public void setValue(String value) {
    this.value = value;
}

@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
    return this.additionalProperties;
}

@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
    this.additionalProperties.put(name, value);
}

}

和AJAX调用:

 $.ajax({
                url: $("#newMealForm").attr("action"),
                data: JSON.stringify({
                    "value": apn
                }),
                type: "GET",
                beforeSend: function (xhr) {
                    xhr.setRequestHeader("Accept", "application/json");
                    xhr.setRequestHeader("Content-Type", "application/json");
                    xhr.setRequestHeader
                },
                success: function (item) {
                    console.log(item.length);
                    availablePTags = item;
                }
            });

将方法类型更改为 POST 并解决了问题。