gpt4 book ai didi

java - 从 spring Controller 返回 JSONObject 给出 406 错误

转载 作者:搜寻专家 更新时间:2023-11-01 00:56:16 27 4
gpt4 key购买 nike

我的 Spring JSON 应用程序的 Spring Controller 返回一个 JSONObject。在访问 url 时,我收到 406 错误页面。它在我返回 String 或 ArrayList 时有效。

Spring Controller :

package com.mkyong.common.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.json.JSONException;
import org.json.JSONObject;

@Controller
public class JSONController {

@RequestMapping("/test")
@ResponseBody
public JSONObject test() {
try {
JSONObject result = new JSONObject();
result.put("name", "Dade")
.put("age", 23)
.put("married", false);
return result;
} catch (JSONException ex) {
Logger.getLogger(JSONController.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}

}

我该如何解决这个问题?感谢帮助。我是 Spring MVC 的新手,在现有的 SO 答案中找不到解决此问题的方法。

最佳答案

您正在尝试手动执行一些 Spring MVC 已经自动为您执行的操作。 Spring 自动推导出返回类型的表示并进行转换。您可以从中了解它是如何做到的 http://spring.io/blog/2013/05/11/content-negotiation-using-spring-mvc .在您的情况下,它转换为 JSON。

It works when i return String or ArrayList

在幕后发生的事情是 Spring MVC 使用 Jackson 库,将返回类型转换为 JSON。而且由于转换 String 或 List 类型没有问题,所以一切正常。

在您发布的代码中发生的事情是,Jackson 的对象映射器试图将 JSONObject 实例转换为 JSON,但失败了,因为 jackson 需要一个 POJO。 JSONObject 实例不是的对象。

要让它工作,您应该简单地编写您的 POJO 并将其返回。所以像

public class Person {

private String name;
private Integer age;
private Boolean married;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Integer getAge() {
return age;
}

public void setAge(Integer age) {
this.age = age;
}

public Boolean getMarried() {
return married;
}

public void setMarried(Boolean married) {
this.married = married;
}
}

并将您的方法更改为

@RequestMapping("/test")
@ResponseBody
public Person test() {
Person person = new Person();
person.setName("Dade");
person.setAge(23);
person.setMarried(false);
return person;
}

关于您的错误,您将在工作示例中看到相同的异常,例如,如果您删除 getter 和 setter,或者错误地命名它们,则在尝试转换为表示时会发生异常,并且您会收到 406 错误

关于java - 从 spring Controller 返回 JSONObject 给出 406 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27642708/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com