gpt4 book ai didi

java - 为什么POST请求变成了GET请求?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:12:34 30 4
gpt4 key购买 nike

当我使用 jQuery 的 $.ajax() 时或 $.post()向服务器发送表单信息的方法,'data' 字符串被添加到 url 的末尾。为什么POST请求变成了GET请求?表单代码如下所示

<form role="form" class="form-horizontal">
<div class="box-body">
<div class="form-group">
<label for="name" class="col-sm-2 control-label">Name</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="name" name="name" required>
</div>
</div>
<div class="form-group">
<label for="hospital" class="col-sm-2 control-label">Hospital</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="hospital" name="hospital" required>
</div>
</div>
<div class="form-group">
<label for="url" class="col-sm-2 control-label">URL</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="url" name="url" required>
</div>
</div>
<div class="form-group">
<label for="version" class="col-sm-2 control-label">Version</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="version" name="version" required>
</div>
</div>
<div class="form-group">
<label for="description" class="col-sm-2 control-label">Description</label>
<div class="col-sm-10">
<textarea class="form-control" id="description" name="description" rows="3" required></textarea>
</div>
</div>
</div>
<div class="box-footer text-center">
<button type="reset" class="btn btn-default">Reset</button>
<button type="submit" class="btn btn-primary" id="submitBtn">Submit</button>
</div>
</form>

Ajax 代码

$("#submitBtn").submit(function(event) {
event.preventDefault();
var info = {};
info.name = $("#name").val();
info.hospital = $("#hospital").val();
info.url = $("#url").val();
info.version = $("#version").val();
info.description = $("#description").val();
$.post("/nuts/add", JSON.stringify(info), function(data) {
console.log(data);
}, "json");
}

url 总是这样

http://localhost:8080/nuts/add.html?name=1&hospital=1&url=1&version=1&description=1

我的后端框架是Spring MVC,controller代码如下所示

@RestController
@RequestMapping(value = "/nuts/add", produces = {APPLICATION_JSON_VALUE})
public class AddNutsApi {

private MongoBasicDao<Nuts> mongoBasicDao;

@Autowired
public void setMongoBasicDao(MongoBasicDao<Nuts> mongoBasicDao) {
this.mongoBasicDao = mongoBasicDao;
}

@RequestMapping(value = "", produces = {APPLICATION_JSON_VALUE}, method = RequestMethod.POST)
public ResponseEntity<Void> addNutsPost(@RequestBody Nuts nuts) throws NotFoundException {
if (nuts.getName() != null && nuts.getHospital() != null && nuts.getUrl() != null && nuts.getVersion() != null && nuts.getDescription() != null) {
try {
Nuts _nuts = new Nuts();
_nuts.setName(new String(nuts.getName().getBytes("ISO-8859-1"), "UTF-8"));
_nuts.setHospital(new String(nuts.getHospital().getBytes("ISO-8859-1"), "UTF-8"));
_nuts.setUrl(new String(nuts.getUrl().getBytes("ISO-8859-1"), "UTF-8"));
_nuts.setVersion(new String(nuts.getVersion().getBytes("ISO-8859-1"), "UTF-8"));
_nuts.setDescription(new String(nuts.getDescription().getBytes("ISO-8859-1"), "UTF-8"));
_nuts.setCreationTime(new Date());
Integer mark = mongoBasicDao.getCollectionMark(Constant.COLLECTION_NUTS);
_nuts.setMark(mark);
mongoBasicDao.addObject(_nuts, Constant.COLLECTION_NUTS);
return new ResponseEntity<>(HttpStatus.OK);
} catch (Exception e) {
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
} else {
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}

}
}

我添加了 jackson 的依赖项(jackson-databind),并设置了 <mvc:annotation-driven/>在 Spring MVC 配置文件中。顺便说一下,DispatcherServlet 的 url-pattern 是 / .谁能告诉我我哪里错了?非常感谢!

最佳答案

当您调用 JSON.stringify(info) 时,你会得到一个 JSON 字符串,例如像这样:

{ "name": "1", "hospital": "1", "url": "1", "version": "1", "description": "1" }

您肯定不会得到这样的查询字符串:

?name=1&hospital=1&url=1&version=1&description=1

这应该是您的提示,即 JavaScript 代码负责 GET请求你看。

问题是您错误地绑定(bind)了提交函数。 $("#submitBtn").submit(...)什么都不做,因为 <button type="submit">不触发任何 submit事件。 <form>

发生的事情是 JavaScript 代码被忽略,点击 Submit按钮将触发表单的提交,并且由于 <form>元素没有 method="post"属性,表单将作为 GET 提交.

解决方案:绑定(bind) submit(...)<form> .

关于java - 为什么POST请求变成了GET请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41758371/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com