我有一个JS:
function getSearchBO() {
var individual = ($('#individual').attr('checked') == 'checked') ? "true"
: "false";
var organization = ($('#organization').attr('checked') == 'checked') ? "true"
: "false"
var enrollmentId = $('#enrollmentId').attr('value').trim();
var medicareId = $('#medicareId').attr('value').trim();
var npi = $('#npi').attr('value').trim();
var contractId = $('#contractId').attr('value').trim();
var firstName = $('#firstName').attr('value').trim();
var lastName = $('#lastName').attr('value').trim();
var ssn = $('#ssn').attr('value').trim();
var dob = $('#dob').attr('value').trim();
var licenseNumber = $('#licenseNumber').attr('value').trim();
var licenseState = $('#licenseState').attr('value').trim();
var specialtyType = $('#specialtyType').attr('value').trim();
var licenseExpirationDate = $('#licenseExpirationDate').attr('value')
.trim();
var businessName = $('#businessName').attr('value').trim();
var ein = $('#ein').attr('value').trim();
var organizationType = $('#organizationType').attr('value').trim();
var ciy = $('#ciy').attr('value').trim();
var state = $('#state').attr('value').trim();
var zipCode = $('#zipCode').attr('value').trim();
var startDate = $('#startDate').attr('value').trim();
var endDate = $('#endDate').attr('value').trim();
var searchBO = {
"individual" : individual,
"organization" : organization,
"enrollmentId" : enrollmentId,
"medicareId" : medicareId,
"npi" : npi,
"contractId" : contractId,
"firstName" : firstName,
"lastName" : lastName,
"ssn" : ssn,
"dob" : dob,
"licenseNumber" : licenseNumber,
"licenseState" : licenseState,
"specialtyType" : specialtyType,
"licenseExpirationDate" : licenseExpirationDate,
"businessName" : businessName,
"ein" : ein,
"organizationType" : organizationType,
"ciy" : ciy,
"state" : state,
"zipCode" : zipCode,
"startDate" : startDate,
"endDate" : endDate
}
return searchBO;
}
我正在调用这个js代码:
function setUpSearchBtn() {
$('#searchBtn').click(
function() {
var searchBO = getSearchBO();
var data = JSON.stringify(searchBO);
alert(data);
var table = $('#searchResultTable').dataTable(
{
"processing" : true,
"destroy" : true,
"dom" : 'trtip',
"ajax" : {
"contentType" : "application/json",
"dataType" : 'json',
"url" : "search.jax",
"type" : "post",
"data" : data
},
"fnRowCallback" : function(nRow, aData,
iDisplayIndex) {
$('td:eq(1)', nRow).html(
'<a href="profile.htm">' + aData[2]
+ '</a>');
return nRow;
},
});
});
}
我有Spring Controller:
@RequestMapping(value = "/search.jax", method = RequestMethod.POST)
@ResponseBody
public List<EntityProfileBO> doSearch(
@RequestBody SearchBO searchBO, Pagination pagination,
HttpServletRequest request, HttpServletResponse response)
throws APSException {
System.out.println(searchBO.toString());
List list = searchService.getSearch(searchBO, pagination);
return list;
}
当我发布时,它给了我错误:
400 Bad Request
我非常确定我的配置和库都是正确的。因为同一个项目我发布了类似下面的数据并且工作正常:
data : JSON2.stringify({
selected : dataString
}),
有人可以帮助我检测我的ajax帖子在一个对象上的错误,而不仅仅是一个字符串。
答案 0 :(得分:0)
在服务器中,您可以尝试使用org.codehaus.jackson.map.ObjectMapper
将json反序列化为对象。例如:
客户端将json发送到服务器
<script type="text/javascript">
function sendAjax() {
$.ajax({
url: "${pageContext.servletContext.contextPath}/multiple/treenodebinding",
type: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
dataType: 'json',
data: "{\"product\":{\"name\":\""+$("#product_name").val()+"\",\"id\":"+$("#product_id").val()+
"},\"user\":{\"name\":\""+$("#user_name").val()+"\",\"id\":"+$("#user_id").val()+",\"email\":\""+$("#user_email").val()+"\"}}",
contentType: 'application/json',
mimeType: 'application/json',
success: function(data) {
$("#result").html("");
$("#result").val(data.id + " " + data.name+" "+data.email);
},
error:function(data,status,er) {
$("#result").val("error: "+data+" status: "+status+" er:"+er);
alert("error: "+data+" status: "+status+" er:"+er);
}
});
}
</script>
服务器中的使用ObjectMapper
反序列化
@RequestMapping(value = "/treenodebinding", method = RequestMethod.POST, produces =
MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public User treeNodeBinding(@RequestBody String json) {
ObjectMapper mapper = new ObjectMapper();
Product product = null;
User user = null;
try {
JsonNode node = mapper.readTree(json);
product = mapper.readValue(node.get("product"), Product.class);
user = mapper.readValue(node.get("user"), User.class);
} catch (JsonProcessingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return user;
};