2012-11-26 10 views
5

Mam problem z przekazaniem tablicy obiektów do kontrolera za pomocą parsera jackson, ajax i jquery.Parser Jacskona: Nierozpoznany token 'tieheT': oczekiwał 'null', 'true' lub 'false'

Mój kontroler wygląda następująco:

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

My Java Object TimesheetTO wygląda następująco:

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)); 
    } 
} 

I używam następujący kod jquery przekazać tablicę obiektów grafiku do kontrolera :

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()); 
    } 
}); 

Podczas przesyłania, otrzymuję błąd opisany powyżej: Jacskon wyjątek parsora: nierozpoznany token "tieheT": oczekiwano 'null', 'true' lub 'false'

Co robię źle ... Czy jest jakiś sposób, aby to naprawić?

Oto wynik 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

Jaki dane w JSON.stringify (timesheetTO) wygląda? – anderssonola

+0

Wygląda to tak: [{"activityMasterId": "1", "name": "Implikacje finansowe", "poniedziałekEffort": "0", "wtorekEffort": "0", "wednesdayEffort": "0", " czwartekEffort ":" 0 "," fridayEffort ":" 0 "," saturdayEffort ":" 0 "," sundayEffort ":" 0 "}, {" activityMasterId ":" 2 "," name ":" Kosztorys ", "mondayEffort": "0", "wtorekEffort": "0", "środaa środkowa": "0", "czwartekEffort": "0", "fridayEffort": "0", "saturdayEffort": "0", "sundayEffort" ":" 0 "}] – Saket

+0

Znalazłem rozwiązanie w tym poście http://stackoverflow.com/questions/9726366/server-unable-to-parse-a-valid-json (możliwe duplikaty) – lekant

Odpowiedz

2

Trzeba sprawdzić, czy karmisz ważne JSON: komunikat o błędzie wskazuje, że nie jest to przypadek. Powinien również podać dokładny numer wiersza i wiersza, który można wykorzystać do znalezienia problemu z wejściowym JSON. Z wiadomości, zgaduję, że albo nazwy właściwości nie są cytowane, albo niektóre wartości String nie są cytowane.

2

I w obliczu podobnego problemu, a teraz działa poprawnie. Problem może być

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

ująć ją w cudzysłów

data : { 
     ' "timesheetTO" : " '+JSON.stringify(timesheetTO)+' " ' 
    } 
Powiązane problemy