Java 如何将包含对象数组的JSON对象发送到spring控制器?
我使用Hibernate@OneToMany映射了两个域模型。我试图在前端创建一个JSON对象,并将其发送给SpringMVC控制器,以自行设置模型数据 以下是我的模型类: ConceptModelDetails.javaJava 如何将包含对象数组的JSON对象发送到spring控制器?,java,angularjs,json,hibernate,spring-mvc,Java,Angularjs,Json,Hibernate,Spring Mvc,我使用Hibernate@OneToMany映射了两个域模型。我试图在前端创建一个JSON对象,并将其发送给SpringMVC控制器,以自行设置模型数据 以下是我的模型类: ConceptModelDetails.java @Entity @Table(name="conceptModelDetails") @SequenceGenerator(name="CONCEPT_SEQ",sequenceName="concept_sequence", initialValue=1, allocati
@Entity
@Table(name="conceptModelDetails")
@SequenceGenerator(name="CONCEPT_SEQ",sequenceName="concept_sequence", initialValue=1, allocationSize=1)
public class ConceptModelDetails implements java.io.Serializable{
private static final long serialVersionUID = 1L;
@Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="CONCEPT_SEQ")
private int instructionsId;
private String operationType;
private String conceptModelID;
private String requestor;
private String status;
private Timestamp requestDateTime;
private Timestamp lastExecutedDateTime;
private Timestamp completedDateTime;
@OneToMany(fetch = FetchType.EAGER, cascade=CascadeType.ALL, mappedBy="conceptModelDetails")
@JsonManagedReference // nested exception is org.springframework.http.converter.HttpMessageNotWritableException:
//Could not write JSON: Infinite recursion
//The fix is to get Jackson to be able to handle bi-directional references
private List<Instructions> instructions = new ArrayList<Instructions>();
public ConceptModelDetails() {
// TODO Auto-generated constructor stub
}
//setter & getter methods
}
这是我在前端创建和发送JSON对象的send方法:
$scope.send = function() {
console.log("test");
var dataObj = {
"operationType" : $scope.operationType,
"conceptModelID" : $scope.conceptID,
"requestor" : $scope.requestor,
"status" : "new",
"requestDateTime" : null,
"lastExecutedDateTime" : null,
"completedDateTime" : null,
"instructions" : null
};
console.log(dataObj);
dataObj.instructions = [];
console.log($scope.operations_publish);
var ins = getSelected();
for ( var i in ins) {
var temp = {
instruction : null,
conceptModelDetails : null
}
temp.instruction = ins[i];
dataObj.instructions.push(temp);
}
var response = $http.post(
'PostService', dataObj);
response.success(function(data, status, headers, config) {
$scope.responseData = data;
});
response.error(function(data, status, headers, config) {
alert("Exception details: " + JSON.stringify({
data : data
}));
});
}
以下是我的控制器:
@RequestMapping(value = "/PostService", method = RequestMethod.POST)
public @ResponseBody String Test(@RequestBody ConceptModelDetails conceptModelDetails){
ApplicationContext context = new ClassPathXmlApplicationContext(
"applicationContext.xml");
ConceptModelDAO obj = (ConceptModelDAO) context.getBean("objDAO");
System.out.println("concept id: "+conceptModelDetails.getConceptModelID()+" "+ conceptModelDetails.getInstructionsId());
System.out.println("instructions id: "+conceptModelDetails.getInstructions());
// ConceptModelDAOImpl objDAO = new ConceptModelDAOImpl();
obj.add(conceptModelDetails);
Instructions instructions = new Instructions();
System.out.println("dimba: " + instructions.getInstruction());
ArrayList<Instructions> operations = (ArrayList<Instructions>) conceptModelDetails.getInstructions();
for (int i = 0; i< operations.size(); i++ ) {
instructions.setInstruction(operations.get(i).getInstruction());
instructions.setConceptModelDetails(conceptModelDetails);
obj.addInstructions(instructions);
}
return null;
}
@RequestMapping(value=“/PostService”,method=RequestMethod.POST)
public@ResponseBody字符串测试(@RequestBody-ConceptModelDetails-ConceptModelDetails){
ApplicationContext上下文=新类路径XmlApplicationContext(
“applicationContext.xml”);
ConceptModelDAO obj=(ConceptModelDAO)context.getBean(“objDAO”);
System.out.println(“概念id:+conceptModelDetails.getConceptModelID()+”“+conceptModelDetails.getInstructionsId());
System.out.println(“指令id:+conceptModelDetails.getInstructions());
//ConceptModelDAOImpl objDAO=新的ConceptModelDAOImpl();
对象添加(概念模型详细信息);
指令=新指令();
System.out.println(“dimba:+instructions.getInstruction());
ArrayList operations=(ArrayList)conceptModelDetails.getInstructions();
对于(int i=0;i
由于
列表说明
,我收到了eror:400(错误请求)。请建议我如何处理此问题。我在这段代码中发现了问题。正如波佐所解释的,ArrayList operations=(ArrayList)conceptModelDetails.getInstructions()代码>
应该是
List operations=conceptModelDetails.getInstructions()代码>
在spring控制器中。您可以发布日志中可能出现的异常的堆栈跟踪吗?也向我们展示从UI发布的JSON。@DeepakKumar:这是错误:org.hibernate.collection.internal.PersistentBag无法转换为java.util.ArrayList。已经解决了。谢谢
@RequestMapping(value = "/PostService", method = RequestMethod.POST)
public @ResponseBody String Test(@RequestBody ConceptModelDetails conceptModelDetails){
ApplicationContext context = new ClassPathXmlApplicationContext(
"applicationContext.xml");
ConceptModelDAO obj = (ConceptModelDAO) context.getBean("objDAO");
System.out.println("concept id: "+conceptModelDetails.getConceptModelID()+" "+ conceptModelDetails.getInstructionsId());
System.out.println("instructions id: "+conceptModelDetails.getInstructions());
// ConceptModelDAOImpl objDAO = new ConceptModelDAOImpl();
obj.add(conceptModelDetails);
Instructions instructions = new Instructions();
System.out.println("dimba: " + instructions.getInstruction());
ArrayList<Instructions> operations = (ArrayList<Instructions>) conceptModelDetails.getInstructions();
for (int i = 0; i< operations.size(); i++ ) {
instructions.setInstruction(operations.get(i).getInstruction());
instructions.setConceptModelDetails(conceptModelDetails);
obj.addInstructions(instructions);
}
return null;
}