2012-11-26 24 views
5

我遇到一個問題,通過傑克遜解析器,ajax和jquery傳遞一個對象數組到控制器。Jacskon解析器:無法識別的令牌'tieheT':期待'null','true'或'false'

我的控制器看起來是這樣的:

@RequestMapping(value="/saveTimeBooking") 
public @ResponseBody ReturnTO saveTimeBooking(@RequestBody TimesheetTO timesheetTO[]) { 
    // ... 
} 

我的Java對象TimesheetTO看起來是這樣的:

public class TimesheetTO implements Serializable { 
    private static final long serialVersionUID = 1L; 

    private int activityMasterId; 
    private String name; 

    private BigDecimal mondayEffort=new BigDecimal(0); 
    private BigDecimal tuesdayEffort=new BigDecimal(0); 
    private BigDecimal wednesdayEffort=new BigDecimal(0); 
    private BigDecimal thursdayEffort=new BigDecimal(0); 
    private BigDecimal fridayEffort=new BigDecimal(0); 
    private BigDecimal saturdayEffort=new BigDecimal(0); 
    private BigDecimal sundayEffort=new BigDecimal(0); 
    public int getActivityMasterId() { 
     return activityMasterId; 
    } 
    public String getName() { 
     return name; 
    } 
    public BigDecimal getMondayEffort() { 
     return mondayEffort; 
    } 
    public BigDecimal getTuesdayEffort() { 
     return tuesdayEffort; 
    } 
    public BigDecimal getWednesdayEffort() { 
     return wednesdayEffort; 
    } 
    public BigDecimal getThursdayEffort() { 
     return thursdayEffort; 
    } 
    public BigDecimal getFridayEffort() { 
     return fridayEffort; 
    } 
    public BigDecimal getSaturdayEffort() { 
     return saturdayEffort; 
    } 
    public BigDecimal getSundayEffort() { 
     return sundayEffort; 
    } 
    public void setActivityMasterId(int activityMasterId) { 
     this.activityMasterId = activityMasterId; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public void setMondayEffort(BigDecimal mondayEffort) { 
     this.mondayEffort = mondayEffort; 
    } 
    public void setTuesdayEffort(BigDecimal tuesdayEffort) { 
     this.tuesdayEffort = tuesdayEffort; 
    } 
    public void setWednesdayEffort(BigDecimal wednesdayEffort) { 
     this.wednesdayEffort = wednesdayEffort; 
    } 
    public void setThursdayEffort(BigDecimal thursdayEffort) { 
     this.thursdayEffort = thursdayEffort; 
    } 
    public void setFridayEffort(BigDecimal fridayEffort) { 
     this.fridayEffort = fridayEffort; 
    } 
    public void setSaturdayEffort(BigDecimal saturdayEffort) { 
     this.saturdayEffort = saturdayEffort; 
    } 
    public void setSundayEffort(BigDecimal sundayEffort) { 
     this.sundayEffort = sundayEffort; 
    } 

    public TimesheetTO(){} 

    public TimesheetTO(String activityMasterId, 
         String name, 
         String mondayEffort, 
         String tuesdayEffort, 
         String wednesdayEffort, 
         String thursdayEffort, 
         String fridayEffort, 
         String saturdayEffort, 
         String sundayEffort) 
    { 
     this.activityMasterId=Integer.parseInt(activityMasterId); 
     this.name=name; 
     this.mondayEffort=BigDecimal.valueOf(Double.parseDouble(mondayEffort)); 
     this.tuesdayEffort=BigDecimal.valueOf(Double.parseDouble(tuesdayEffort)); 
     this.wednesdayEffort=BigDecimal.valueOf(Double.parseDouble(wednesdayEffort)); 
     this.thursdayEffort=BigDecimal.valueOf(Double.parseDouble(thursdayEffort)); 
     this.fridayEffort=BigDecimal.valueOf(Double.parseDouble(fridayEffort)); 
     this.saturdayEffort=BigDecimal.valueOf(Double.parseDouble(saturdayEffort)); 
     this.sundayEffort=BigDecimal.valueOf(Double.parseDouble(sundayEffort)); 
    } 
} 

而且,我現在用的是下面的jQuery代碼傳遞時間表對象的數組控制器:

var datacounter=0; 
/*var totalcount=0;*/ 
var timesheetTO = new Array(); 

$("#timeSheetTableId input[id^=activityMasterId]").each(function() { 
     $('#activityMasterId_'+datacounter).removeAttr('disabled'); 
     $('#name_'+datacounter).removeAttr('disabled'); 

     timesheetTO.push({ 
      "activityMasterId": $('#activityMasterId_'+datacounter).val(), 
      "name": $('#name_'+datacounter).val(), 
      "mondayEffort": new Integer($('#mondayEffort_'+datacounter).val()), 
      "tuesdayEffort": $('#tuesdayEffort_'+datacounter).val(), 
      "wednesdayEffort": $('#wednesdayEffort_'+datacounter).val(), 
      "thursdayEffort": $('#thursdayEffort_'+datacounter).val(), 
      "fridayEffort": $('#fridayEffort_'+datacounter).val(), 
      "saturdayEffort": $('#saturdayEffort_'+datacounter).val(), 
      "sundayEffort": $('#sundayEffort_'+datacounter).val() 
     }); 
     datacounter=datacounter+1; 
}); 

var url = contextRoot + "timesheet/saveTimeBooking.htm"; 
$.ajax({ 
    type : 'POST', 
    url : url, 
    async : false, 
    timeout : 5000, 
    contentType: 'application/json', 
    dataType: 'json', 
    data : { 
     timesheetTO : JSON.stringify(timesheetTO) 
    }, 
    success : function(data, textStatus) { 
     alert('successful'); 

    }, 
    error : function(xhr, textStatus, errorThrown) { 
     alert('request failed in saving timesheet:' + errorThrown + " " + textStatus + " " 
       + xhr.toString()); 
    } 
}); 

在提交時,我收到上面給出的錯誤:Jacskon parsor異常:無法識別的令牌'tieheT':期待'null','true'或'false'

我在做什麼錯誤..有什麼辦法可以解決這個問題嗎?

這裏是JSON.stringify結果:

[{"activityMasterId":"1","name":"Financial Implications","mondayEffort":"0","tuesdayEffort":"0","wednesdayEffort":"0","thur‌​sdayEffort":"0","fridayEffort":"0","saturdayEffort":"0","sundayEffort":"0"},{"act‌​ivityMasterId":"2","name":"Cost estimation","mondayEffort":"0","tuesdayEffort":"0","wednesdayEffort":"0","thursd‌​ayEffort":"0","fridayEffort":"0","saturdayEffort":"0","sundayEffort":"0"}] 
+0

是什麼在JSON.stringify(timesheetTO)的數據是什麼樣子? – anderssonola

+0

看起來像這樣:[{「activityMasterId」:「1」,「name」:「財務影響」,「mondayEffort」:「0」,「tuesdayEffort」:「0」,「wednesdayEffort」:「0」 thursdayEffort「:」0「,」fridayEffort「:」0「,」saturdayEffort「:」0「,」sundayEffort「:」0「},{」activityMasterId「:」2「,」name「:」Cost estimation「, 「mondayEffort」: 「0」, 「tuesdayEffort」: 「0」, 「wednesdayEffort」: 「0」, 「thursdayEffort」: 「0」, 「fridayEffort」: 「0」, 「saturdayEffort」: 「0」,「sundayEffort 「:」0「}] – Saket

+0

我發現這個帖子的解決方案http://stackoverflow.com/questions/9726366/server-unable-to-parse-a-valid-json (可能重複) – lekant

回答

2

你需要確認你餵養有效的JSON:錯誤信息表明情況並非如此。它也應該給你確切的行和行號,你可以用它來查找輸入JSON的問題。從消息來看,我猜測任何屬性名稱都沒有被引用,或者某些字符串值沒有被引用。

2

我遇到類似的問題,現在是工作的罰款。 該問題可能是

data : { 
     timesheetTO : JSON.stringify(timesheetTO) 
    } 

它括在雙引號

data : { 
     ' "timesheetTO" : " '+JSON.stringify(timesheetTO)+' " ' 
    } 
相關問題