Jacskon-parser : Unbekannte token 'tieheT': erwartete 'null', 'true' oder 'false'
Ich habe ein problem mit der übergabe eines array mit Objekten in der controller durch jackson-parser, ajax und jquery.
Mein controller sieht wie folgt aus:
@RequestMapping(value="/saveTimeBooking")
public @ResponseBody ReturnTO saveTimeBooking(@RequestBody TimesheetTO timesheetTO[]) {
//...
}
Meine Java-Objekt TimesheetTO sieht wie folgt aus:
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));
}
}
Und ich bin mit den folgenden jquery-code, um das array übergeben von Arbeitszeittabellen-Objekte, controller:
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());
}
});
Beim Absenden, erhalte ich den Fehler wie oben angegeben : Jacskon parsor Ausnahme: Unrecognized token 'tieheT': erwartete 'null', 'true' oder 'false'
Was mache ich falsch ..gibt es irgendeine Möglichkeit dieses Problem zu beheben?
Hier ist das Ergebnis der JSON.stringify
:
[{"activityMasterId":"1","name":"Financial Implications","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"}]
Was bedeutet die Daten im JSON-Format.stringify(timesheetTO) Aussehen ?
Es sieht wie folgt aus: [{"activityMasterId":"1","name":"Finanzielle Implications","mondayEffort":"0","tuesdayEffort":"0","wednesdayEffort":"0","thursdayEffort":"0","fridayEffort":"0","saturdayEffort":"0","sundayEffort":"0"},{"activityMasterId":"2","name":"Kosten estimation","mondayEffort":"0","tuesdayEffort":"0","wednesdayEffort":"0","thursdayEffort":"0","fridayEffort":"0","saturdayEffort":"0","sundayEffort":"0"}]
Ich fand die Lösung auf diesen Beitrag stackoverflow.com/questions/9726366/... (möglichst doppelte)
Es sieht wie folgt aus: [{"activityMasterId":"1","name":"Finanzielle Implications","mondayEffort":"0","tuesdayEffort":"0","wednesdayEffort":"0","thursdayEffort":"0","fridayEffort":"0","saturdayEffort":"0","sundayEffort":"0"},{"activityMasterId":"2","name":"Kosten estimation","mondayEffort":"0","tuesdayEffort":"0","wednesdayEffort":"0","thursdayEffort":"0","fridayEffort":"0","saturdayEffort":"0","sundayEffort":"0"}]
Ich fand die Lösung auf diesen Beitrag stackoverflow.com/questions/9726366/... (möglichst doppelte)
InformationsquelleAutor Saket | 2012-11-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie sicherstellen, dass Sie füttern gültiges JSON: Fehlermeldung zeigt an, dies ist nicht der Fall. Es sollte Ihnen auch die genaue Zeile und die Zeilennummer ein, die Sie verwenden können, um das problem zu finden mit Eingabe JSON. Von der Meldung, ich vermute, dass entweder die Eigenschaft name nicht zitiert wird, oder einige String-Werte sind nicht angegeben.
InformationsquelleAutor StaxMan
Stand ich vor einem ähnlichen Problem und jetzt ist es gut funktioniert.
Die Frage könnte
in Anführungszeichen setzen
InformationsquelleAutor Pradeep Singarakannan
Das problem ist, dass Sie übergeben Sie einen string-Wert, das fehlen von Anführungszeichen und der compiler wird deshalb erwartet, dass ein boolean - /null-Objekt.
Sollten Sie überprüfen, welchen Wert Sie auf der Durchreise sind bei runtime debugging, durch kopieren in einen text-editor, um es zu analysieren gründlich, wenn nötig.
InformationsquelleAutor Manuel Roldan
Die ajax-Daten sollte der string des JSON-Objekts. Finden Sie hier die Lösung:
Die Verwendung von jQuery für post JSON-Objekt zu Spring 3 controller
InformationsquelleAutor ezzadeen