我将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)
任何关于保存foo的barArray的建议。
当我使用Postman发送数据时
{
"fooName": "A",
"bars" : [
{
"barTitle" : "a"
}
]
}
插入数据并在db。中创建新的foo。
答案 0 :(得分:1)
至于我的方法,问题很明显,你应该发送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],
}]
})
并在休息控制器中进行一些更改,以便以这种方式在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错误。