2013-07-25 2 views
0

내 JS 파일에서이 JSON 데이터를 게시하고 있습니다.스프링 컨트롤러가 JS 파일에서 JSON POST 데이터를 가져 오지 않습니다.

myPayload[0].id=1&myPayload[0].name=Me&myPayload[0].pId=2&myPayload[0].pName=Dad 

YUI 번호 :

var formElements = YAHOO.util.Connect.setForm("myFormId"); 
alert("New form elements:" + formElements); // Alerting POST data as shown above 

YAHOO.util.Connect.resetFormState(); 

YAHOO.util.Connect.asyncRequest("POST", "/mycontroller/save", { 
    cache : false, 
    success : function(res) { 
     alert(res.responseText); 
    }, 
    failure : function(res) { 
     alert(res.responseText); 
    } 
}, formElements); 

컨트롤러 코드 :

@RequestMapping(value = "/save", method=RequestMethod.POST) 
@ResponseBody 
public String saveData(ModelMap mm, @ModelAttribute("myPayload") MyBean bean, BindingResult errors) { 

    log.info("save:Called"); 
    List<MyDTO> lst = bean.getList(); 
    log.info("save:Number of records:" + lst.size()); 

    return "Successfully Updated."; 
} 

콩 코드 :

public class MyBean { 

    private List<MyDTO> myPayload = new AutoPopulatingList<MyDTO>(MyDTO.class); 

    public List<MyDTO> getList() { 
     return myPayload; 
    } 

    public void setList(List<MyDTO> mList) { 
     this.myPayload = mList; 
    } 

} 

목록은 여전히 ​​비어 있습니다. bean 값도 비어 있습니다. 여기서 내가 뭘 잘못하고 있니?

+0

를 사용하는 경우

는 잭슨 의존성을 추가 하시겠습니까? – Hippoom

+0

예, 요소를 만드는 동안 포매터에 ID를주는 방식입니다. 예. id : "myPayload ["+ index + "]." + oColumn.getKey(). JS 파일에서 setForm API 호출의 페이로드를 가져오고 있습니다. 나는 나의 질문에서 그것을 언급했다. 요청을 보내기 전에 JS에서 모든 id : value 맵을 올바르게 가져옵니다. 그러나 컨트롤러에서 그걸 얻지 못하고 있습니다. 운송 중에 페이로드가 손실됩니다. – Sujoy

답변

0

음 ... 작동합니까?

< form:form method="post" action="your url" modelAttribute="myPayload" > 

또는 사용 @RequestBody 같은 형태로 modelAttribute="contactForm" 추가 :

@RequestMapping(value = "/save", method=RequestMethod.POST) 
@ResponseBody 
public String saveData(ModelMap mm, @RequestBody MyBean bean, BindingResult errors) { 

을 그건 그렇고, JSON에 myPayload[0].id=1&myPayload[0].name=Me&myPayload[0].pId=2&myPayload[0].pName=Dad을 설정 (내가 JS에 익숙하지 않은 해요) 유이 수 있을까? 그것은 결국 일반적인 JSON과는 다릅니다.

UPDATE

@ModelAttribute 솔루션 : 변경 모든 myPayload[x].foo=barlist[x].foo=bar 같은 양식 태그에 modelAttribute="myPayload"을 유지 (목록 필드에서 myBean의 이름 인 경우).

@RequestBody 솔루션 : 당신이 당신의 형태로 "myPayload"와 같은 명령 이름을 지정 했 @RequestBody

<dependency> 
    <groupId>org.codehaus.jackson</groupId> 
    <artifactId>jackson-mapper-asl</artifactId> 
    <version>1.9.12</version> 
</dependency> 

<dependency> 
    <groupId>org.codehaus.jackson</groupId> 
    <artifactId>jackson-core-asl</artifactId> 
    <version>1.9.12</version> 
</dependency> 
+0

감사합니다! 당신의 제안에 따라 노력하겠습니다. – Sujoy

+0

1. modelAttribute가 작동하지 않았습니다. 2. @RequestBody가 이상한 jackson baseclass를 던지고 있습니다. 예외는 없습니다. – Sujoy

+0

@Sujoy는 YUI에서 "myPayload [0] .id = 1"문자열이 와 같습니까? 이 프레임 워크에 익숙하지 않은가? RequestBody 문제에 대한 대답 업데이트를 참조하십시오. – Hippoom

관련 문제