JSON 对象在通过 AJAX POST 传递给 POJO 时传递部分 NULL 值?
JSON object imparting partial NULL values when passed to POJO thorugh AJAX POST?
我的 javascript
有一个 AJAX
电话,因为 -
var obj = {
CAEVCode:"TEST2",
CAEVName:"TriggerRedemption",
DateofReceipt:"YAHOO",
LogReference:"test1"
}
var obj1=JSON.stringify(obj);
$.ajax({
url:'./webapi/input/post',
type: 'POST',
data:obj1,
contentType : "application/json",
dataType:'json',
success:function(data)
{
var values = JSON.stringify(data);
alert(values);
},
error:function(xhr,textstatus,errorthrown){
alert(xhr.responseText);
alert(textstatus);
alert(errorthrown);
}
},'json');
当调用 JavaScript
并进行 AJAX
调用时,我的对象使用 [=22= 通过 (POST
) 发送到以下 URL -> ./webapi/input/post
],我对应的InputResponse
Class如下-
@Path("/input")
public class InputResponse {
SimpleDateFormat dt = new SimpleDateFormat("dd-MM-yyyy");
InputService inputservice = new InputService();
@POST
@Path("/post")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Input postInputRecord(Input obj) throws SQLException, ParseException{
GsonBuilder builder = new GsonBuilder();
Gson gson = builder.create();
System.out.println(gson.toJson(obj));
String CAEVCode=obj.getCAEVCode();
String CAEVName=obj.getCAEVName();
String DateOfReceipt =obj.getDateofReceipt();
String LogReference=obj.getLogReference();
addUser(new Input(LogReference,CAEVCode,CAEVName,DateOfReceipt));
return obj;
}
public Input addUser(Input input) throws SQLException{
return inputservice.addUsers(input);
}
接下来,我的POJO
如下-
@XmlRootElement
public class Input {
private String CAEVCode;
private String CAEVName;
private String DateofReceipt;
private String LogReference;
public Input() { }
public Input(String logReference, String cAEVCode, String cAEVName,
String dateofReceipt ) {
super();
LogReference = logReference;
CAEVCode = cAEVCode;
CAEVName = cAEVName;
DateofReceipt = dateofReceipt;
}
public String getLogReference() {
return LogReference;
}public void setLogReference(String logReference) {
LogReference = logReference;
}public String getCAEVCode() {
return CAEVCode;
}public void setCAEVCode(String cAEVCode) {
CAEVCode = cAEVCode;
}public String getCAEVName() {
return CAEVName;
}public void setCAEVName(String cAEVName) {
CAEVName = cAEVName;
}public String getDateofReceipt() {
return DateofReceipt;
}public void setDateofReceipt(String dateofReceipt) {
DateofReceipt = dateofReceipt;
}
}
问题是,当我 运行 我的页面时,JavasScript
对象在 AJAX
调用 InputResponse
class 但并不是所有的值都过来了。 2 个值变为空值,另一个值变为正确值。我整个早上都在调试它,但没有帮助。我还有另一段代码用于类似的业务逻辑,恰好工作得很好。我也碰巧尝试过其他形式的 AJAX
调用来与之相处,但我仍然徒劳无功。非常感谢任何帮助。
我猜这与属性的命名约定有关。在依赖默认反序列化时,您需要注意缩写。您可以通过在 属性 上指定具有所需名称的注释来覆盖默认行为。例如,如果您使用的是 Jackson,则可以添加 JsonProperty("..")
@JsonProperty("LogReference")
public String getLogReference() { return LogReference; }
@JsonProperty("CAEVCode")
public String getCAEVCode() { return CAEVCode; }
@JsonProperty("CAEVName")
public String getCAEVName() { return CAEVName; }
@JsonProperty("DateofReceipt")
public String getDateofReceipt() { return DateofReceipt; }
如果您有 JAXB 注释支持,您也可以使用 @XmlElement(name = "")
而不是 @JsonProperty
。
我的 javascript
有一个 AJAX
电话,因为 -
var obj = {
CAEVCode:"TEST2",
CAEVName:"TriggerRedemption",
DateofReceipt:"YAHOO",
LogReference:"test1"
}
var obj1=JSON.stringify(obj);
$.ajax({
url:'./webapi/input/post',
type: 'POST',
data:obj1,
contentType : "application/json",
dataType:'json',
success:function(data)
{
var values = JSON.stringify(data);
alert(values);
},
error:function(xhr,textstatus,errorthrown){
alert(xhr.responseText);
alert(textstatus);
alert(errorthrown);
}
},'json');
当调用 JavaScript
并进行 AJAX
调用时,我的对象使用 [=22= 通过 (POST
) 发送到以下 URL -> ./webapi/input/post
],我对应的InputResponse
Class如下-
@Path("/input")
public class InputResponse {
SimpleDateFormat dt = new SimpleDateFormat("dd-MM-yyyy");
InputService inputservice = new InputService();
@POST
@Path("/post")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Input postInputRecord(Input obj) throws SQLException, ParseException{
GsonBuilder builder = new GsonBuilder();
Gson gson = builder.create();
System.out.println(gson.toJson(obj));
String CAEVCode=obj.getCAEVCode();
String CAEVName=obj.getCAEVName();
String DateOfReceipt =obj.getDateofReceipt();
String LogReference=obj.getLogReference();
addUser(new Input(LogReference,CAEVCode,CAEVName,DateOfReceipt));
return obj;
}
public Input addUser(Input input) throws SQLException{
return inputservice.addUsers(input);
}
接下来,我的POJO
如下-
@XmlRootElement
public class Input {
private String CAEVCode;
private String CAEVName;
private String DateofReceipt;
private String LogReference;
public Input() { }
public Input(String logReference, String cAEVCode, String cAEVName,
String dateofReceipt ) {
super();
LogReference = logReference;
CAEVCode = cAEVCode;
CAEVName = cAEVName;
DateofReceipt = dateofReceipt;
}
public String getLogReference() {
return LogReference;
}public void setLogReference(String logReference) {
LogReference = logReference;
}public String getCAEVCode() {
return CAEVCode;
}public void setCAEVCode(String cAEVCode) {
CAEVCode = cAEVCode;
}public String getCAEVName() {
return CAEVName;
}public void setCAEVName(String cAEVName) {
CAEVName = cAEVName;
}public String getDateofReceipt() {
return DateofReceipt;
}public void setDateofReceipt(String dateofReceipt) {
DateofReceipt = dateofReceipt;
}
}
问题是,当我 运行 我的页面时,JavasScript
对象在 AJAX
调用 InputResponse
class 但并不是所有的值都过来了。 2 个值变为空值,另一个值变为正确值。我整个早上都在调试它,但没有帮助。我还有另一段代码用于类似的业务逻辑,恰好工作得很好。我也碰巧尝试过其他形式的 AJAX
调用来与之相处,但我仍然徒劳无功。非常感谢任何帮助。
我猜这与属性的命名约定有关。在依赖默认反序列化时,您需要注意缩写。您可以通过在 属性 上指定具有所需名称的注释来覆盖默认行为。例如,如果您使用的是 Jackson,则可以添加 JsonProperty("..")
@JsonProperty("LogReference")
public String getLogReference() { return LogReference; }
@JsonProperty("CAEVCode")
public String getCAEVCode() { return CAEVCode; }
@JsonProperty("CAEVName")
public String getCAEVName() { return CAEVName; }
@JsonProperty("DateofReceipt")
public String getDateofReceipt() { return DateofReceipt; }
如果您有 JAXB 注释支持,您也可以使用 @XmlElement(name = "")
而不是 @JsonProperty
。