我很难通过HTTP PUT (使用Spring MVC)使服务器接受复杂的JSON。
我有两个实体:
建筑物
@Entity
@Table
public class Building {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(name = "name", nullable = false)
private String name;
@Column(name = "description")
private String description;
@OneToMany(mappedBy = "building", fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.REMOVE})
@JsonBackReference
private Set<Floor> floors;
// Default Constructor, Getters, Setters
}
地板
@Entity
@Table
public class Floor {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@ManyToOne(optional = false, fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST})
@JsonManagedReference
private Building building;
@Column(name = "number", nullable = false)
private short number;
@Column(name = "description")
private String description;
// Default Constructor, Getters, Setters
}
控制器
@RestController
@RequestMapping("/admin/Floors")
public class AdminFloorController {
// Autowired Floor Service + Setter
// Other methods
@PutMapping(value = "/Save",
consumes = "application/json",
produces = MediaType.TEXT_HTML_VALUE)
public ResponseEntity<String> save(@RequestBody Floor floor) {
return floorService.save(floor) ?
new ResponseEntity<String>("Floor was successfully saved.", HttpStatus.OK) :
new ResponseEntity<String>("Floor was not saved. An error may have occured.", HttpStatus.OK);
}
}
这是AJAX请求。 (来自ID为“主表单”的表单)
$("#main-form").submit(function(e) {
e.preventDefault();
$.ajax({
type: "PUT",
url: "Floors/Save",
data: JSON.stringify({
"id": $("#main-form").find("input[name='id']").val(),
"number": $("#main-form").find("input[name='number']").val(),
"building": {
"id": $("#main-form").find("select[name='building.id']").val()
}
}),
contentType: "application/json",
success: function(data) {
$("#main-modal").modal("hide");
createTable();
}
});
});
已正确构造AJAX请求以及JSON对象。 但是发送时,服务器始终以错误415:不支持的媒体类型作为响应。
我明确地告诉AJAX使用带有以下代码的JSON正文发送请求:
contentType:“ application / json”
,控制器方法带有以下注释:
@PutMapping(URL,消耗=“ application / json”)
但不起作用。我的Building REST Controller中具有几乎相同的代码,并且工作起来很吸引人。但是我似乎无法使其与此实体一起工作。
编辑
我的问题已解决。原来问题出在杰克逊的注解 @JsonManagedReference 上。我只是删除了上述注释,但将“后向引用”保留在一侧。
答案 0 :(得分:0)
我的问题已解决。原来问题出在杰克逊的注解 @JsonManagedReference 上。我只是删除了上述注释,但将“后向引用”保留在一侧。