【问题标题】:Pass JSON as Java Class to Spring Controller by GET通过 GET 将 JSON 作为 Java 类传递给 Spring Controller
【发布时间】:2013-12-13 14:54:14
【问题描述】:

我有以下有效的代码:

@RequestMapping(value = "/jsonasclass", method = RequestMethod.POST, produces = "application/json")
public @ResponseBody
ContactVO jsonAsClassPost(@RequestBody ContactVO ct){
    ct.setFirstName("This-property-is-changed-in-the-controller");
    return ct;
}

以及相应的ajax通过post调用:

$.ajax({
            url: '/jsonasclass/',
            type: 'POST',
            dataType: 'json',
            data: JSON.stringify({
                  id:1,
                  userID:1.1, 
                  login:'sample-login',
                  firstName:'sample-first-name'
                }),
            contentType: 'application/json',
            mimeType: 'application/json',
            success: _callBack,
            error: _errorCallback
        });

现在我想实现同样的目标,但我想通过 GET 来实现。有人知道怎么做吗?

  • 我尝试将 POST 更改为 GET(在控制器和 ajax 调用中),但没有成功。
  • 我得到的错误:描述服务器拒绝了这个请求,因为请求实体的格式不受所请求方法的请求资源支持。

【问题讨论】:

  • 尝试在 ajax 调用和 @RequestMapping 'method' 属性中更改为 'GET'
  • 是的,我在两个地方都改变了。但它没有用。
  • 使用 Firebug 跟踪 GET 请求
  • 没有构建/编译问题。 HTTP GET 并不意味着以这种方式工作(在请求中传递内容)。请参阅 thisthis。将参数传递给GET 的常用方法是通过 URL 参数。
  • @Floegipoky 是的,但是您将 字符串,而不是对象附加到 URL。他应该将iduserId 等作为字符串传递并使用@PathVariable@RequestParam 注释检索它们

标签: java json spring spring-mvc get


【解决方案1】:

感谢 RaulRene 的评论,您将如何做到这一点。

  • 从控制器中删除@RequestBody 并更改获取方法。
  • 将控制器中类的属性作为浏览器变量发送,spring 会自动将它们映射到类。

解决办法如下:

@RequestMapping(value = "/jsonasclass", method = RequestMethod.GET, produces = "application/json")
public @ResponseBody
ContactVO jsonAsClassGet(ContactVO  ct){
    ct.setFirstName("This-property-is-changed-in-the-controller");
    return ct;
}

以及对应的ajax:

    $.ajax({
        url:'/jsonasclass/',
        type: 'GET',
        data: {
              id:1,
              userID:1.1, 
              login:'sample-login',
              firstName:'sample-first-name'
            },
        success: _callBack,
        error: _errorCallback
    });

【讨论】:

  • 顺便说一句,确保您接受作为参数的类和您返回的类实现了 Serializable。
猜你喜欢
  • 2019-12-13
  • 2021-08-06
  • 1970-01-01
  • 2016-03-26
  • 2013-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-19
相关资源
最近更新 更多