【问题标题】:No Converter for return type JSONObject返回类型 JSONObject 没有转换器
【发布时间】:2016-09-09 14:27:20
【问题描述】:

我正在使用 spring mvc,这是我的服务。

 @RequestMapping(value="/data/{id}",method=RequestMethod.POST)
    @ResponseBody
    public JSONObject data(@PathVariable Long id ,@RequestBody Long Intake ) {
        JSONObject obj = new JSONObject();
        obj.put("test", false);
            System.out.equals(obj);
            return obj;
    }

它抛出的错误是:

  java.lang.IllegalArgumentException: No converter found for return value of type: class org.json.JSONObject

我检查了许多指向我的链接,可能是缺少 getter/setter 或缺少 @ResponseBody 注释。所以我在不需要 getter/setter 的情况下运行此代码,但仍然显示此错误。

我也导入了这个依赖。

import org.json.*;

对这个问题有什么想法吗??

【问题讨论】:

  • 你可以从方法obj.toString()stackoverflow.com/questions/18972013/…返回字符串
  • 可能重复:stackoverflow.com/questions/37380913/… 我已经发布了一个答案,也将满足您的需求。
  • @VladBochenin toString() 有点野蛮,因为它稍微绕过了杰克逊有用的算法和设置。我也不确定“Response-Type”是否会在返回一个裸字符串后设置为“application/json”,需要检查。 toMap() 是更好的选择。

标签: java spring-mvc jsonobject


【解决方案1】:

1 - 尝试在您的项目中添加 jackson(如果尚未声明)。

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

或 2 - 返回带有 ObjectMapper 序列化的字符串。

@RequestMapping(value="/data/{id}",method=RequestMethod.POST)
@ResponseBody
public String data(@PathVariable Long id ,@RequestBody Long Intake ) {
    ObjectMapper obj = new ObjectMapper();

    Map<String, Object> map =  new HashMap<>();
    map.put("test", false);

    return obj.writeValueAsString(map);
}   

【讨论】:

  • 1-jackson 也被添加并声明。2-这不起作用。在 obj.writeValueAsString(map) 处给出“未处理的异常类型 JsonProcessingException”;
  • 顺便说一句,我不想​​返回字符串。我需要 json 对象返回
  • 你试过了吗? @RequestMapping(value="/data/{id}",method=RequestMethod.POST) @ResponseBody public String data(@PathVariable Long id ,@RequestBody Long Intake ) { try { ObjectMapper obj = new ObjectMapper(); JSONObject obj = 新 JSONObject(); obj.put("测试", false); System.out.equals(obj);返回 obj.writeValueAsString(obj); } catch (JsonProcessingException e) { // TODO } }
  • com.fasterxml.jackson.databind.JsonMappingException:无限递归(StackOverflowError)(通过引用链:com.fasterxml.jackson.databind.ObjectMapper["factory"]->com.fasterxml.jackson. databind.MappingJsonFactory["codec"] 这是错误。
  • 我知道返回 o 对象 JSON 的方式是使用 HashMap。因为你的动态结构。我不知道其他解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-08
  • 1970-01-01
  • 2019-09-18
  • 1970-01-01
  • 2019-02-23
  • 2020-03-16
相关资源
最近更新 更多