我使用Spring MVC并尝试使用jQuery。我在我的网页上有这个:
$(document).ready(function () {
var entity = {mag: "status_key", paper: "View10"};
$("#btn").click(function () {
$.ajax({
url: "ajaxJsonPost",
type: 'post',
dataType: 'json',
data: JSON.stringify(entity),
contentType: 'application/json',
});
});
});
Spring服务器有这个:
@RequestMapping(value = "ajaxJsonPost", method = RequestMethod.POST)
public void postJson(@RequestBody Entity en) throws IOException {
System.out.println("writing entity: " + en.toString());
}
好的,实体来到服务器。但浏览器控制台会打印 404 not found
。我知道我的POST请求需要任何响应。在Internet上,我找到了建议我返回ResponseEntity对象的解决方案,或者使用注释@ResponseStatus。他们都很好地返回HttpStatus,但我不知道在哪些情况下我应该使用它们。什么是最好的方式?
答案 0 :(得分:1)
@Controller
@RequestMapping("/apipath")
public class SomeController {
@RequestMapping(value = "/ajaxJsonPost", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public String postJson(@RequestBody final Entity en) {
System.out.println(en.toString());
//assuming you have a class "EntityService" and
//it has a method postData
//which takes Entity object as parameter and pushes into database.
EntityService.postData(en);
System.out.println("added");
return "success";
}
}
服务器端的实体对象
@JsonAutoDetect
public class Entity {
private String mag;
private String paper;
public String getMag() {
return mag;
}
public void setMag(final String mag) {
this.mag = mag;
}
public String getPaper() {
return paper;
}
public void setPaper(final String paper)
this.paper = paper;
}
}
AJAX
$(document).ready(function () {
var entity = {mag: "status_key", paper: "View10"};
$("#btn").click(function () {
$.ajax({
url: "/apipath/ajaxJsonPost",
type: 'post',
dataType: 'json',
data: JSON.stringify(entity),
contentType: 'application/json',
success : function(response) {
alert(response);
},
error : function() {
alert('error');
}
});
});
});
至于为何以及何时使用@ResponseStatus和@ResponseEntity,@Sotirios Delimanolis已经有一个简短的答案。 When use @ResponseEntity。
它说:
ResponseEntity 旨在表示整个HTTP响应。您可以 控制进入它的任何东西:状态代码,标题和正文。
@ResponseBody 是HTTP响应正文的标记 @ResponseStatus 声明HTTP响应的状态代码。
@ResponseStatus 不是很灵活。它标志着整个方法,所以你 必须确保您的处理程序方法始终表现相同 办法。你仍然无法设置标题。你需要的 HttpServletResponse或HttpHeaders参数。
基本上,ResponseEntity可以让您做得更多。