ajax post 调用导致将数组发送到弹簧休息控制器时出现 400(错误请求)
ajax post call causes 400 (Bad Request) on sending array to spring rest controller
我有OneToMany
映射为
@Entity
public class Foo implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long fooId;
private String fooName;
@OneToMany(mappedBy = "foo", cascade = CascadeType.ALL)
private Set<Bar> bars = new HashSet<Bar>();
// getters and setters go here
}
和
@Entity
public class Bar implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long barId;
private String barTitle;
private static final long serialVersionUID = 1L;
@ManyToOne
@JoinColumn(name = "fooId")
private Foo foo;
// getters and setters go here
}
我创建了一个FooRestController来使用ajax保存数据
@RequestMapping(value = "/foo/", headers="Accept=*/*", consumes="application/json", method = RequestMethod.POST)
public ResponseEntity<Void> create(@RequestBody Foo foo) {
fooService.saveFoo(foo);
Set<Bar> bars = foo.getBars();
for (Bar bar : bars) {
barService.savebar(bar);
}
return new ResponseEntity<Void>(HttpStatus.CREATED);
}
我的 ajax POST 请求是
var barArray = [];
bar[0] = "Bar1";
bar[1] = "Bar2";
$.ajax({
contentType : 'application/json',
crossDomain: true,
type: 'POST',
url: '/foo/',
dataType : 'json',
data : JSON.stringify({
'fooName' : 'A',
'bars' : barArray // this line here causes error
})
在这一点上,我收到错误,因为
POST http://localhost:8080/name/foo/ 400 (Bad Request)
任何保存酒吧的建议福数组。
注意
当我使用邮递员发送数据时,作为
{
"fooName": "A",
"bars" : [
{
"barTitle" : "a"
}
]
}
插入数据并在数据库中创建新的 Foo。
至于我的方法,问题很明显,你应该在邮递员中发送barArray
,所以写这个代码
var barArray = [];
bar[0] = "Bar1";
bar[1] = "Bar2";
$.ajax({
contentType : 'application/json',
crossDomain: true,
type: 'POST',
url: '/foo/',
dataType : 'json',
data : JSON.stringify({
'fooName' : 'A',
'bars' : [{
"barTitle" : bar[0],
},{
"barTitle" : bar[1],
}]
})
并在 REST 控制器中进行一些更改,以这种方式将fooId
保存在Bar
实体
@RequestMapping(value = "/foo/", headers="Accept=*/*", consumes="application/json", method = RequestMethod.POST)
public ResponseEntity<Void> create(@RequestBody Foo foo) {
fooService.saveFoo(foo);
Set<Bar> bars = foo.getBars();
for (Bar bar : bars) {
bar.setFoo(foo); // this foo object comes from method arg @RequestBody Foo foo above
barService.savebar(bar);
}
return new ResponseEntity<Void>(HttpStatus.CREATED);
}
尝试一下,希望现在您不会看到 400 错误。
相关文章:
- Ember:当子控制器同时观察到父控制器触发请求的相同属性时
- Ajax”;链接_;当点击非常快时发送多个请求控制器请求(Rails4)
- 将http请求中的数据传递给C#控制器
- 如何处理对具有 PHP 的控制器的 XMLhttp 请求
- MVC AJAX POST 请求在控制器中显示为空
- AngularJs 错误:$http请求虽然在控制器中定义
- Rails4:是否可以将Ajax.get请求发送到相同的当前页面控制器
- 使用Ajax请求rails控制器数据
- ExtJS使用控制器中的View Form Data作为Ajax请求参数
- Symfony2将ajax请求数据传递给表单呈现控制器
- AngularJS指令中的作用域未定义,控制器中有ajax请求
- Rails控制器操作可以同时处理html和javascript请求吗
- sailsjs cors 糟糕的请求仍然通过控制器
- 一个控制器中的多个路由会导致 400:错误请求
- Ajax 请求从 JavaScript 到 Codeigniter 控制器
- 从 ajax 请求 (jQuery) 到 Code Igniter 控制器的 500 错误
- ajax post 调用导致将数组发送到弹簧休息控制器时出现 400(错误请求)
- 如何使用 angularjs 将$http请求返回的数据用于同一控制器中的另一个请求
- 控制器和指令请求同一元素上的隔离范围
- 如何在通过ajax发出的控制器请求结束时进行有效的浏览器重定向