update at 2021-03-07 21:08:22 by ehlxr
This commit is contained in:
parent
510e085195
commit
650156569d
254
src/main/java/io/github/ehlxr/es/utils/JsonUtils.java
Normal file
254
src/main/java/io/github/ehlxr/es/utils/JsonUtils.java
Normal file
@ -0,0 +1,254 @@
|
||||
/*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright © 2020 xrv <xrg@live.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
package io.github.ehlxr.es.utils;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
import com.fasterxml.jackson.databind.*;
|
||||
import org.elasticsearch.common.Strings;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author ehlxr
|
||||
* @since 2021-03-07 18:57.
|
||||
*/
|
||||
public class JsonUtils {
|
||||
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
|
||||
private static final String STANDARD_FORMAT = "yyyy-MM-dd HH:mm:ss";
|
||||
|
||||
static {
|
||||
// 对象的所有字段全部列入
|
||||
OBJECT_MAPPER.setSerializationInclusion(JsonInclude.Include.ALWAYS);
|
||||
// 取消默认转换 timestamps 形式
|
||||
OBJECT_MAPPER.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
|
||||
// 忽略空 bean 转 JSON 的错误
|
||||
OBJECT_MAPPER.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
|
||||
// 所有的日期格式都统一为以下的样式:yyyy-MM-dd HH:mm:ss
|
||||
OBJECT_MAPPER.setDateFormat(new SimpleDateFormat(STANDARD_FORMAT));
|
||||
// 忽略在 JSON 字符串中存在,但是在 java 对象中不存在对应属性的情况
|
||||
OBJECT_MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
||||
}
|
||||
|
||||
public static ObjectMapper om() {
|
||||
return OBJECT_MAPPER;
|
||||
}
|
||||
|
||||
/**
|
||||
* 对象转为 JsonNode 实例
|
||||
*
|
||||
* @param obj 要转换的对象
|
||||
* @param <T> 要转换的对象类型
|
||||
* @return {@link JsonNode}实例
|
||||
*/
|
||||
public static <T> JsonNode obj2JsonNode(T obj) {
|
||||
try {
|
||||
return OBJECT_MAPPER.readTree(obj2String(obj));
|
||||
} catch (JsonProcessingException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 对象转为 JSON 字符串
|
||||
*
|
||||
* @param obj 要转换的对象
|
||||
* @param <T> 要转换的对象类型
|
||||
* @return JSON 字符串
|
||||
*/
|
||||
public static <T> String obj2String(T obj) {
|
||||
if (obj == null) {
|
||||
return "";
|
||||
}
|
||||
try {
|
||||
return obj instanceof String ? (String) obj : OBJECT_MAPPER.writeValueAsString(obj);
|
||||
} catch (JsonProcessingException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 对象转为格式化的 JSON 字符串
|
||||
*
|
||||
* @param obj 要转换的对象
|
||||
* @param <T> 要转换的对象类型
|
||||
* @return 格式化的 JSON 字符串
|
||||
*/
|
||||
public static <T> String obj2StringPretty(T obj) {
|
||||
if (obj == null) {
|
||||
return "";
|
||||
}
|
||||
try {
|
||||
return obj instanceof String ? (String) obj : OBJECT_MAPPER.writerWithDefaultPrettyPrinter().writeValueAsString(obj);
|
||||
} catch (JsonProcessingException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 字符串转换为自定义对象
|
||||
*
|
||||
* @param str 要转换的字符串
|
||||
* @param clazz 自定义对象的 class 对象
|
||||
* @param <T> 自定义对象类型
|
||||
* @return 自定义对象
|
||||
*/
|
||||
public static <T> T string2Obj(String str, Class<T> clazz) {
|
||||
if (Strings.isNullOrEmpty(str) || clazz == null) {
|
||||
throw new RuntimeException("json string to obj param should not empty");
|
||||
}
|
||||
try {
|
||||
return clazz.equals(String.class) ? (T) str : OBJECT_MAPPER.readValue(str, clazz);
|
||||
} catch (JsonProcessingException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 字符串转换为自定义对象
|
||||
*
|
||||
* @param str 要转换的字符串
|
||||
* @param typeReference 集合对象 typeReference
|
||||
* @param <T> 集合对象类型
|
||||
* @return 自定义对象
|
||||
*/
|
||||
public static <T> T string2Obj(String str, TypeReference<T> typeReference) {
|
||||
if (Strings.isNullOrEmpty(str) || typeReference == null) {
|
||||
throw new RuntimeException("json string to obj param should not empty");
|
||||
}
|
||||
try {
|
||||
return typeReference.getType().equals(String.class) ? (T) str : OBJECT_MAPPER.readValue(str, typeReference);
|
||||
} catch (JsonProcessingException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 字符串转换为自定义对象
|
||||
*
|
||||
* @param str 要转换的字符串
|
||||
* @param collectionClazz 集合 class
|
||||
* @param elementClazzes 集合对象 class
|
||||
* @param <T> 集合对象类型
|
||||
* @return 自定义对象
|
||||
*/
|
||||
public static <T> T string2Obj(String str, Class<?> collectionClazz, Class<?>... elementClazzes) {
|
||||
JavaType javaType = OBJECT_MAPPER.getTypeFactory().constructParametricType(collectionClazz, elementClazzes);
|
||||
try {
|
||||
return OBJECT_MAPPER.readValue(str, javaType);
|
||||
} catch (JsonProcessingException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试类
|
||||
*/
|
||||
static class User {
|
||||
private Integer id;
|
||||
private String email;
|
||||
|
||||
public Integer getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Integer id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getEmail() {
|
||||
return email;
|
||||
}
|
||||
|
||||
public void setEmail(String email) {
|
||||
this.email = email;
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
try {
|
||||
User user1 = new User();
|
||||
user1.setId(1);
|
||||
user1.setEmail("xrv@live.com");
|
||||
|
||||
String userJsonstr = JsonUtils.obj2String(user1);
|
||||
System.out.println(userJsonstr);
|
||||
|
||||
String userJsonPretty = JsonUtils.obj2StringPretty(user1);
|
||||
System.out.println(userJsonPretty);
|
||||
|
||||
User user2 = JsonUtils.string2Obj(userJsonstr, User.class);
|
||||
user2.setId(2);
|
||||
user2.setEmail("ehlxr.me@gmail.com");
|
||||
|
||||
List<User> userList = new ArrayList<>();
|
||||
userList.add(user1);
|
||||
userList.add(user2);
|
||||
String userListJson = JsonUtils.obj2String(userList);
|
||||
System.out.println(userListJson);
|
||||
|
||||
List<User> userListBean = JsonUtils.string2Obj(userListJson, new TypeReference<List<User>>() {
|
||||
});
|
||||
if (userListBean != null) {
|
||||
userListBean.forEach(user -> System.out.println(user.getId() + " : " + user.getEmail()));
|
||||
}
|
||||
List<User> userListBean2 = JsonUtils.string2Obj(userListJson, List.class, User.class);
|
||||
if (userListBean2 != null) {
|
||||
userListBean2.forEach(user -> System.out.println(user.getId() + " : " + user.getEmail()));
|
||||
}
|
||||
|
||||
// Map<String, String> body = ImmutableMap.of("mobile", "13211111222", "realName", "realName");
|
||||
Map<String, String> body = new HashMap<String, String>() {
|
||||
{
|
||||
put("mobile", "13211111222");
|
||||
put("realName", "realName");
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
String obj2String = JsonUtils.obj2String(body);
|
||||
System.out.println(obj2String);
|
||||
|
||||
Map<String, String> stringStringMap = JsonUtils.string2Obj(obj2String, new TypeReference<Map<String, String>>() {
|
||||
});
|
||||
|
||||
stringStringMap.forEach((k, v) -> System.out.println(k + " : " + v));
|
||||
|
||||
JsonNode jsonNode = JsonUtils.obj2JsonNode(userList);
|
||||
System.out.println(jsonNode.path(0));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,9 +1,23 @@
|
||||
package io.github.ehlxr.es;
|
||||
|
||||
import io.github.ehlxr.es.utils.JsonUtils;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.ToString;
|
||||
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
|
||||
import org.elasticsearch.action.bulk.BulkRequest;
|
||||
import org.elasticsearch.action.bulk.BulkResponse;
|
||||
import org.elasticsearch.action.index.IndexRequest;
|
||||
import org.elasticsearch.action.index.IndexResponse;
|
||||
import org.elasticsearch.action.search.SearchRequest;
|
||||
import org.elasticsearch.action.search.SearchResponse;
|
||||
import org.elasticsearch.action.support.master.AcknowledgedResponse;
|
||||
import org.elasticsearch.client.RequestOptions;
|
||||
import org.elasticsearch.client.RestHighLevelClient;
|
||||
import org.elasticsearch.client.indices.GetIndexRequest;
|
||||
import org.elasticsearch.common.unit.TimeValue;
|
||||
import org.elasticsearch.common.xcontent.XContentType;
|
||||
import org.elasticsearch.index.query.QueryBuilders;
|
||||
import org.elasticsearch.search.aggregations.AggregationBuilders;
|
||||
import org.elasticsearch.search.aggregations.Aggregations;
|
||||
@ -16,6 +30,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.stream.IntStream;
|
||||
|
||||
@SpringBootTest
|
||||
class SpringbootEsApplicationTests {
|
||||
@ -23,8 +38,62 @@ class SpringbootEsApplicationTests {
|
||||
@Autowired
|
||||
private RestHighLevelClient restHighLevelClient;
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@ToString
|
||||
static class User {
|
||||
private String name;
|
||||
private Integer gender;
|
||||
private Integer age;
|
||||
private String email;
|
||||
}
|
||||
|
||||
@Test
|
||||
void searchData() throws IOException {
|
||||
void indexTest() throws IOException {
|
||||
IndexRequest request = new IndexRequest("my_idx");
|
||||
request.id("10");
|
||||
request.ifSeqNo();
|
||||
request.source(JsonUtils.obj2String(new User("zhansan", 1, 23, "zhansan@test.com")), XContentType.JSON);
|
||||
|
||||
IndexResponse response = restHighLevelClient.index(request, RequestOptions.DEFAULT);
|
||||
System.out.println(response);
|
||||
}
|
||||
|
||||
@Test
|
||||
void deleteIndexTest() throws IOException {
|
||||
GetIndexRequest getIndexRequest = new GetIndexRequest("my_idx");
|
||||
boolean exists = restHighLevelClient.indices().exists(getIndexRequest, RequestOptions.DEFAULT);
|
||||
if (exists) {
|
||||
DeleteIndexRequest request = new DeleteIndexRequest("my_idx");
|
||||
request.timeout(TimeValue.timeValueMinutes(2));
|
||||
|
||||
AcknowledgedResponse response = restHighLevelClient.indices().delete(request, RequestOptions.DEFAULT);
|
||||
System.out.println(response.isAcknowledged());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void bulkTest() throws IOException {
|
||||
BulkRequest request = new BulkRequest("my_idx");
|
||||
|
||||
IntStream.range(0, 10).forEach(i -> {
|
||||
IndexRequest indexRequest = new IndexRequest("my_idx")
|
||||
.id("" + i)
|
||||
.source(JsonUtils.obj2String(new User("zhansan" + 1, i % 2, 20 + i, i + "zhansan@test.com")), XContentType.JSON);
|
||||
|
||||
System.out.println(indexRequest.toString());
|
||||
request.add(indexRequest);
|
||||
});
|
||||
|
||||
|
||||
BulkResponse response = restHighLevelClient.bulk(request, RequestOptions.DEFAULT);
|
||||
System.out.println(response.hasFailures());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
void searchTest() throws IOException {
|
||||
/*
|
||||
* GET bank/_search
|
||||
* {
|
||||
|
Loading…
Reference in New Issue
Block a user