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 并解决了问题。
我在处理 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 并解决了问题。