我已经用Spring开发了一个REST API条目,它在Elasticsearch中执行搜索,现在我想返回ES找到的任何结果作为响应。我不关心搜索结果,也不知道其中的JSON结构。我只想把它还给客户。
我希望这样的事情能奏效:
@RequestMapping(value = "/search/{index:.*}", method = RequestMethod.GET) public void search(@PathVariable String index, @RequestParam Map allRequestParams, HttpServletResponse response) throws IOException { BoolQueryBuilder query = QueryBuilders.boolQuery(); for (Map.Entry entry : allRequestParams.entrySet()) { query.should(QueryBuilders.fuzzyQuery(entry.getKey(), entry.getValue())); } SearchResponse results = esClient.prepareSearch("nyc_visionzero") .setTypes("logs") .setQuery(query) .execute() .actionGet(); SearchHits hits = results.getHits(); hits.writeTo(response.getOutputStream()); }
但最后一行有一个编译错误,因为两个OutputStreams不兼容。所以我的问题是,将Elasticsearch的结果与Spring的响应连接起来的最简单的方法是什么?
您可以不尝试写入响应outputstream,而是更改搜索方法的签名以返回一个字符串,然后直接将结果作为有效的JSON返回。类似于:
@RequestMapping(value = "/search/{index:.*}", method = RequestMethod.GET)
public String search(@PathVariable String index, @RequestParam Map allRequestParams, HttpServletResponse response)
throws IOException
{
BoolQueryBuilder query = QueryBuilders.boolQuery();
for (Map.Entry entry : allRequestParams.entrySet()) {
query.should(QueryBuilders.fuzzyQuery(entry.getKey(), entry.getValue()));
}
SearchResponse results = esClient.prepareSearch("nyc_visionzero")
.setTypes("logs")
.setQuery(query)
.execute()
.actionGet();
SearchHits hits = results.getHits();
// Replacing hits.writeTo(response.getOutputStream()); below
StringBuilder builder = new StringBuilder();
SearchHit[] hitsDatas = hits.hits();
int length = hitsDatas.length;
builder.append("[");
for (int i = 0; i < length; i++) {
if (i == length - 1) {
builder.append(hitsDatas[i].getSourceAsString());
} else {
builder.append(hitsDatas[i].getSourceAsString());
builder.append(",");
}
}
builder.append("]");
return builder.toString();
}
问题内容: 我有一个mysqli查询,我需要将其格式化为移动应用程序的JSON。 我已经设法为查询结果生成一个XML文档,但是我正在寻找更轻量的东西。(有关我当前的XML代码,请参见下文) 问题答案: 这样的输出: 如果您想要其他样式,可以尝试以下方法: 输出将是这样的:
问题内容: Django对从数据库返回到JSON格式的ORM模型具有良好的自动序列化功能。 如何将SQLAlchemy查询结果序列化为JSON格式? 我尝试过,但是它编码查询对象本身。我试过了但是回来了 将对象序列化为真的很困难吗?没有默认的序列化程序吗?如今,序列化ORM查询结果是非常常见的任务。 我需要的只是返回SQLAlchemy查询结果的JSON或XML数据表示形式。 javascript
问题内容: 由于使用JDBC连接器进行MySQL查询,因此我有一个结果集。所以我的工作是将结果集转换为JSON格式。这样我就可以将其作为AJAX响应发送到客户端。有人可以解释一下如何转换为JSON格式,因为我对Java和JSON都是新手 问题答案: 许多人正确地回答了这个问题。但是,我认为我可以使用以下几小段代码为该帖子添加更多价值。它使用Apache-DBUtils和Gson库。
我有以下代码,它从Marketo系统中获取一些数据 这将返回给我以下数据 我想做的是,保存这个返回到一个拼花文件。但是当我用下面的代码尝试时,我收到了一条错误消息。 我做错了什么?
我使用Spring数据JPA和Spring Boot应用程序。我有一个属性很少的实体类。假设我有10个属性与实体关联,我只想检索其中的几个(用户名、密码、名字、名字、电子邮件)。 因此,我编写了一个查询,只获取5个字段,但该方法不返回实体对象,而是返回一个普通对象。 如何将查询结果转换为Spring Data JPA中的实体?
问题内容: 我想将流结果输出转换为字符串,因为我想在Junit中使用它,我想我需要使用字符串编写器,但是我不确定如何确切地使用它。 谢谢费多 问题答案: 查看并学习使用StreamResult类的javadocs(http://java.sun.com/javase/6/docs/api/)。StreamResult的构造函数之一采用Writer对象作为参数。您将看到Writer的子类之一是Str