我尝试向我的servlet发出以下POST请求:
$.post('SubmitDashboardInfo/reimbursementRequest',
{
startDate : $('#startDate').val().trim(),
endDate : $('#endDate').val().trim(),
expenseType : $('#expenseType').val().trim(),
eventDescription: $('#eventDescription').val().trim(),
eventCost : $('#eventCost').val().trim(),
location : {
streetAddress : $('#streetAddress').val().trim(),
city : $('#city').val().trim(),
stateAbbreviation : $('#state').val().trim(),
zipCode : $('#zipCode').val().trim()
}/*,
gradeScale : $.makeArray($('#gradeScales > tr').map(function() {
var tds = $(this).children('td');
return {
letterGrade : $($(tds)[0]).text(),
lowerLimit : $($(tds)[1]).text()
};
}))*/
},
function(data)
{
console.log(data);
})
,它调用以下服务方法:
public static boolean validateUserForm(HttpServletRequest req)
{
// get all the parameters here
try {
Type type = new TypeToken<ReimbursementRequest>() {}.getType();
ReimbursementRequest rr = gson.fromJson(req.getReader(), type);
System.out.println(rr.toString());
} catch (JsonSyntaxException e) {
e.printStackTrace();
return false;
} catch (JsonIOException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
}
catch (NumberFormatException ex)
{
ex.printStackTrace();
return false;
}
return true;
}
我的ReimbursementRequest
POJO看起来像这样:
package p1.revature.beans;
public class ReimbursementRequest extends Bean {
private int id, requesterID;
private double amount;
private String status;
private int reimbursableEventID;
private ReimbursableEvent reimbursableEvent;
/**
* Default constructor
*/
public ReimbursementRequest() {
super();
}
/**
* Constructor for everything but the id. This is used to insert into the reimbursement request table
* @param requesterID : the ID of the Employee requesting reimbursement
* @param amount : the amount requested
* @param status : the status of the request
* @param reimbursableEventID : the id of the ReimbursableEvent the requester is trying to have covered
*/
public ReimbursementRequest(int requesterID, double amount, String status, int reimbursableEventID) {
super();
this.requesterID = requesterID;
this.amount = amount;
this.status = status;
this.reimbursableEventID = reimbursableEventID;
}
/**
* Constructor for every field but the reimbursable event id. Used for rendering material client-side
* @param id
* @param requesterID
* @param amount
* @param status
* @param reimbursableEvent
*/
public ReimbursementRequest(int id, int requesterID, double amount, String status,
ReimbursableEvent reimbursableEvent) {
super();
this.id = id;
this.requesterID = requesterID;
this.amount = amount;
this.status = status;
this.reimbursableEvent = reimbursableEvent;
}
/**
* Constructor for every field. Used for select queries.
* @param id : the primary key of this request
* @param requesterID : the ID of the Employee requesting reimbursement
* @param amount : the amount requested
* @param status : the status of the request
* @param reimbursableEventID : the id of the ReimbursableEvent the requester is trying to have covered
*/
public ReimbursementRequest(int id, int requesterID, double amount, String status, int reimbursableEventID) {
super();
this.id = id;
this.requesterID = requesterID;
this.amount = amount;
this.status = status;
this.reimbursableEventID = reimbursableEventID;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getRequesterID() {
return requesterID;
}
public void setRequesterID(int requesterID) {
this.requesterID = requesterID;
}
public double getAmount() {
return amount;
}
public void setAmount(double amount) {
this.amount = amount;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public int getReimbursableEventID() {
return reimbursableEventID;
}
public void setReimbursableEventID(int reimbursableEventID) {
this.reimbursableEventID = reimbursableEventID;
}
public ReimbursableEvent getReimbursableEvent() {
return reimbursableEvent;
}
public void setReimbursableEvent(ReimbursableEvent reimbursableEvent) {
this.reimbursableEvent = reimbursableEvent;
}
@Override
public String toString() {
return "ReimbursementRequest [id=" + id + ", requesterID=" + requesterID + ", amount=" + amount + ", status="
+ status + ", reimbursableEventID=" + reimbursableEventID + ", reimbursableEvent=" + reimbursableEvent
+ "]";
}
}
出于某种原因,Gson认为我正在传递一个普通的ol字符串,当我实际传递一个JSON字符串时。它返回此错误:
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:224)
at com.google.gson.Gson.fromJson(Gson.java:888)
at com.google.gson.Gson.fromJson(Gson.java:853)
at p1.revature.services.HandleDashboardData.validateUserForm(HandleDashboardData.java:34)
at p1.revature.servlets.SubmitDashboardInfo.doPost(SubmitDashboardInfo.java:32)
我正拼命地试图让这个项目在2天内完成。我知道这很多,但请帮忙...
答案 0 :(得分:0)
您可以将数据作为json对象传递... Stringify.json
我会尝试为你找一个例子。
干杯 维基
答案 1 :(得分:0)
在与朋友讨论之后,我发现我应该用JSON.stringify(myBusinessObj);
序列化JavaScript对象以将它们发送到服务器。
他问我的问题为什么,让我难以理解......