elasticsearch,spring-restcontroller,Java,Arrays,Spring,elasticsearch,Spring Restcontroller" /> elasticsearch,spring-restcontroller,Java,Arrays,Spring,elasticsearch,Spring Restcontroller" />

Java 当从@ResponseBody返回JSONArray时,会出现抛出错误

Java 当从@ResponseBody返回JSONArray时,会出现抛出错误,java,arrays,spring,elasticsearch,spring-restcontroller,Java,Arrays,Spring,elasticsearch,Spring Restcontroller,我使用@Controller通过ActiveMQ从Elasticsearch获取记录。但是当我以JSON数组的形式返回ElasticSearch响应时,我在我的Postman客户端中得到了以下错误 请在下面找到我的错误 { "timestamp": "2018-06-09T06:59:18.755+0000", "status": 500, "error": "Internal Server Error", "message": "Type definition error: [simple t

我使用@Controller通过ActiveMQ从Elasticsearch获取记录。但是当我以JSON数组的形式返回ElasticSearch响应时,我在我的Postman客户端中得到了以下错误

请在下面找到我的错误

{
"timestamp": "2018-06-09T06:59:18.755+0000",
"status": 500,
"error": "Internal Server Error",
"message": "Type definition error: [simple type, class org.json.JSONObject]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.json.JSONObject and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)",
"path": "/document/40011"
}
请找到我试图返回JSONArray的
@Controller
方法

@RequestMapping(value = DOCUMENTS, method = RequestMethod.GET)
    public @ResponseBody JSONArray getDocumentByName(HttpServletRequest httpRequest, HttpServletResponse httpResponse, @PathVariable("name") String name) {
        System.out.println("Searching documents....");
        JSONArray result;
        result = searchEngineClient.searchByDocuments(name);
        return result;
    }
请查找堆栈跟踪:

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.json.JSONObject and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)
at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77) ~[jackson-databind-2.9.5.jar:2.9.5]
at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1191) ~[jackson-databind-2.9.5.jar:2.9.5]
at com.fasterxml.jackson.databind.DatabindContext.reportBadDefinition(DatabindContext.java:312) ~[jackson-databind-2.9.5.jar:2.9.5]
at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:71) ~[jackson-databind-2.9.5.jar:2.9.5]
对于以下代码,我可以将响应返回为
String
。但我想以JSONArray的身份回来

@RequestMapping(value = DOCUMENTS, method = RequestMethod.GET)
public @ResponseBody Object getDocumentByName(HttpServletRequest httpRequest, HttpServletResponse httpResponse, @PathVariable("name") String name) {
    System.out.println("Searching documents....");
    JSONArray result;
    result = searchEngineClient.searchByDocuments(name);
    return result.toString();
}

只需删除
@ResponseBody
。这是一个
@RestController
它将被自动序列化为JSON。

您能发布StackTrace吗?您试图检索的数据结构是什么?它是否包含映射?我从我的
Dao
类返回列表,在这两个类之间,我还具有活动的MQ集成。因此,我将
list
转换为
JSONArray
,并将
JSONArray
发送到我的
控制器
。从
Controller
中,我想再次以
JSONArray
的身份返回,我不能这样做-它的给定错误如果我删除
@ResponseBody
我得到了“状态”:404,“错误”:“未找到”,并且没有得到任何堆栈跟踪。这是
@RestController
?是的,让Jackson进行序列化比使用JsonArray、JsonObject等更好。。。在您的情况下,您不需要实现jackson自定义序列化程序/反序列化程序。
@RequestMapping(value=DOCUMENTS,method=RequestMethod.GET)public@ResponseBody List getDocumentByName(HttpServletRequest-httpRequest,HttpServletResponse-httpResponse,@PathVariable(“name”)字符串名){System.out.println(“搜索文档…”);返回searchEngineClient.searchByDocuments(名称);}