Gau*_*mar 5 java spring spring-mvc
我的Spring JSON应用程序的Spring控制器返回一个JSONObject.在访问网址时,我收到406错误页面.它在我返回String或ArrayList时有效.
弹簧控制器:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?感谢帮助.我是Spring MVC的新手,无法在现有的SO答案中找到解决这个问题的方法.
您正在尝试手动执行 Spring MVC 已自动为您执行的操作。Spring 自动推导返回类型的表示并进行转换。您可以从http://spring.io/blog/2013/05/11/content-negotiation-using-spring-mvc了解它是如何实现的 。在你的例子中,它转换为 JSON。
当我返回 String 或 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;
}
}
Run Code Online (Sandbox Code Playgroud)
并将你的方法更改为
@RequestMapping("/test")
@ResponseBody
public Person test() {
Person person = new Person();
person.setName("Dade");
person.setAge(23);
person.setMarried(false);
return person;
}
Run Code Online (Sandbox Code Playgroud)
对于与您的错误有关的问题,您将在工作示例中看到相同的异常,例如,如果您删除 getter 和 setter,或者错误地命名它们,则在尝试转换为表示形式时会发生异常,并且您会收到 406 错误
| 归档时间: |
|
| 查看次数: |
2249 次 |
| 最近记录: |