java - 从 @ResponseBody 返回 JSONArray 时抛出错误

标签 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 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。

关于java - 从 @ResponseBody 返回 JSONArray 时抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50771801/

相关文章:

java - java.util.HashMap.containsKey(Object key) 实现是否违反 java.util.Map.containsKey(Object key) 文档?

java - Apache Cayenne - 我找不到定义 Token.kind 字段常量的代码

java - Spring Controller 中的 PathVariable

java - spring 配置文件激活(非编程)

java - 简单的 Spring Java @Configuration 到 @Autowire 而不使用 @Bean

javascript - PHP Javascript - 数组多维错误

javascript - 从javascript中的一组二维数组中提取偶数数组

python - 复制列表 : editing copy without changing original

spring - Webflux 还不支持 ResponseBodyAdvice?

java - 基于String的简单Java类型