【问题标题】:How do I send a object using JavaScript to Spring Controller using json如何使用 json 将使用 JavaScript 的对象发送到 Spring Controller
【发布时间】:2015-01-18 19:19:47
【问题描述】:

我正在制作简单的 Spring MVC Web 应用程序。在我的应用程序中,我想将一个对象从前端发送到 Spring 控制器方法。但是当我这样做时,我得到了 js 错误

500 (Internal Server Error)

我试图在互联网上找到一个好的答案,但仍然找不到一个好的答案。

我的控制器方法是

        @RequestMapping(value = "/add", method = RequestMethod.GET, consumes = { MediaType.APPLICATION_JSON_VALUE }, produces = { MediaType.APPLICATION_JSON_VALUE })
public @ResponseBody String addInventory(@RequestBody InventoryAddParam inventoryAddParam) {

    log.info("addInventory");
    ServiceRequest<InventoryAddParam> serviceRequest =  convertAddParamtoServiceRequest(inventoryAddParam);
    validate(inventoryAddParam);
    inventoryService.addInventory(serviceRequest);
    return "Inventory Added Succesfully";
}                             

inventoryAddParam 是一个仅包含字符串参数的可序列化对象。

我发送对象的 JavaScript 函数是

function sendDataTest() {
$.ajax({
    url : "/GradleSpringMVC/inventory/add",
    type : 'GET',
    dataType : 'json',
    data : JSON.stringify(populateTestObject()),
    contentType : 'application/json',
    mimeType : 'application/json'
}).done(function(data) {
    // temGrid.addJSONData(data);
}).fail(function(error) {
    // parseToPageAlerts(error.responseText);
}).always(function() {
    // hideLoading()
});}

我正在创建 addParam 对象以作为 ajax 调用发送。 它在函数中创建

function populateTestObject(){
var addParam = new InventoryAddParam();
addParam.inventoryId = "INV001";
addParam.name = "ECG MACHINE";
addParam.price = "1000";
addParam.hospital = "Colombo";
addParam.userNote = "User Note";
return addParam;}      

我在这里做错了吗?

有关错误的其他详细信息

Remote Address:127.0.0.1:8080
Request URL:http://localhost:8080/GradleSpringMVC/inventory/add
Request Method:POST
Status Code:500 Internal Server Error

标题

Connection:close
Content-Language:en
Content-Length:4939
Content-Type:text/html;charset=utf-8
Date:Wed, 21 Jan 2015 03:55:19 GMT
Server:Apache-Coyote/1.1

【问题讨论】:

  • 更新了更改和新异常。

标签: javascript jquery ajax json spring-mvc


【解决方案1】:

你的 spring 方法消耗了 application/json 并且错误消息说你发送的不是一个有效的 JSON。

按照那条线,我相信您的问题是 $.extend(addParam),当设置为 single argument it will extend a jQuery namespace with the object 时,不会返回任何要字符串化的 JSON 对象(并且没有任何内容发送到服务器)。可能的解决方案是删除 extend 函数,或者添加另一个参数,在这种情况下将返回一个有效的 JSON 对象,例如

function sendData() {
var addParam = createAddParam();
$.ajax({
    url : "/GradleSpringMVC/inventory/add",
    type : 'GET',
    dataType : 'json',
    data : JSON.stringify(addParam),
    contentType : 'application/json',
    mimeType : 'application/json'
}).done(function(data) {
    // temGrid.addJSONData(data);
}).fail(function(error) {
    // parseToPageAlerts(error.responseText);
}).always(function() {
    // hideLoading()
});} 

【讨论】:

    【解决方案2】:

    找到了答案。刚刚把jackson的版本改成1.9.12

    'org.codehaus.jackson:jackson-mapper-asl:1.9.12'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-13
      • 2021-03-17
      • 2023-03-27
      • 2019-12-16
      • 2011-09-19
      相关资源
      最近更新 更多