【问题标题】:How I can send json response from my spring controller?如何从我的 spring 控制器发送 json 响应?
【发布时间】:2015-10-19 15:18:24
【问题描述】:

我是这个主题的新手。我怎样才能从我的控制器返回 JSON 数据,使用类似的东西(使用 ResponseBody)

@RequestMapping(value = "/ajaxtest", method = RequestMethod.GET)
@ResponseBody
public Set<String> ajaxTest() {
Set<String> records = new HashSet<String>();
records.add("Record #1");
records.add("Record #2");
return records; 
}

我尝试 ro 使用 Jackson,但出现 http 406 错误。 我应该在 Spring 4.0.3 版中使用什么正确版本的 Jackson,使用的算法是什么? 更新 阿贾克斯调用

<button id="btn">Click!</button>
<script>
$("#btn").click(
function sendAjax() {
    $.ajax({
        url: "/ajaxtest",
        dataType: "json",
        success: function(data) {
            alert(data);
        },
        error:function() {
            alert("error");
        }
    });
})
</script>

【问题讨论】:

  • 为什么不用gson?有了杰克逊,我遇到了很多问题。
  • 我的 prjofect 看不到 Gson 类并且无法解决它。你能给我举个例子吗? @ManuZi
  • 看看以下内容:javacreed.com/simple-gson-example
  • @ManuZI Maven 无法编译项目,因为没有看到 gson jar。我试图将它添加到我的 intellij 库中,但它不起作用
  • 你在你的pom文件中添加了依赖吗?

标签: json spring spring-mvc jackson


【解决方案1】:

如果你使用的是 maven,你可以在你的 pom.xml 中包含以下依赖

Jackson Mapper 版本 1 足以将您的对象转换为 JSON 对象:

<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.9.13</version>
</dependency>

或者您也可以选择最新的 Jackson 版本,

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.6.0</version>
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.6.0</version>
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.6.0</version>
</dependency>

【讨论】:

  • 这是一个古老的版本。
【解决方案2】:

对于转换为 json 请求,您必须将以下 3 jar 包含到您的项目构建路径中。 Jackson jar 用于将 HTTP 请求转换为 jason 格式。

还提到 headear=content-type=application/json

这些是 jar 文件

jackson-mapper-asl.jar
jackson-core-asl.jar
jackson-jaxrs.jar

【讨论】:

  • 谢谢,会试试的。但是我应该在哪里提到标题?
  • @RequestMapping(value = "/ajaxtest", method = RequestMethod.GET,header="contetnt-type=application/json") @ResponseBody public Set ajaxTest() { Set 记录 = 新的 HashSet(); records.add("记录#1"); records.add("记录#2");退货记录; }
  • 即@RequestMapping(value = "/ajaxtest", method = RequestMethod.GET,header="contetnt-type=application/json")
猜你喜欢
  • 2014-09-21
  • 2012-12-15
  • 2017-11-22
  • 2012-07-27
  • 1970-01-01
  • 1970-01-01
  • 2021-03-17
  • 2019-10-20
相关资源
最近更新 更多