diff --git a/src/main/java/mc/protocol/status/server/StatusServerResponse.java b/src/main/java/mc/protocol/status/server/StatusServerResponse.java index 4d6a6a0..3cfbfda 100644 --- a/src/main/java/mc/protocol/status/server/StatusServerResponse.java +++ b/src/main/java/mc/protocol/status/server/StatusServerResponse.java @@ -1,12 +1,11 @@ package mc.protocol.status.server; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import lombok.Data; import mc.protocol.Packet; import mc.protocol.dto.ServerInfo; import mc.protocol.io.NetInputStream; import mc.protocol.io.NetOutputStream; +import mc.protocol.utils.JsonUtils; /** * Status server packet, response. @@ -58,13 +57,8 @@ public class StatusServerResponse implements Packet { public ServerInfo getServerInfoDto() { if (serverInfoDto == null) { - try { - ObjectMapper mapper = new ObjectMapper(); - serverInfoDto = mapper.readValue(serverInfo, ServerInfo.class); - } catch (JsonProcessingException e) { - e.printStackTrace(); - return new ServerInfo(); - } + JsonUtils.jsonToObject(serverInfo, ServerInfo.class) + .ifPresent(serverInfoDto -> this.serverInfoDto = serverInfoDto); } return serverInfoDto; @@ -78,13 +72,7 @@ public class StatusServerResponse implements Packet { @Override public void writeSelf(NetOutputStream netOutputStream) { if (serverInfo == null) { - try { - ObjectMapper mapper = new ObjectMapper(); - serverInfo = mapper.writeValueAsString(serverInfoDto); - } catch (JsonProcessingException e) { - e.printStackTrace(); - serverInfo = "{}"; - } + serverInfo = JsonUtils.objectToJson(serverInfo); } netOutputStream.writeString(serverInfo); diff --git a/src/main/java/mc/protocol/utils/JsonUtils.java b/src/main/java/mc/protocol/utils/JsonUtils.java new file mode 100644 index 0000000..335d02a --- /dev/null +++ b/src/main/java/mc/protocol/utils/JsonUtils.java @@ -0,0 +1,48 @@ +package mc.protocol.utils; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.experimental.UtilityClass; +import lombok.extern.slf4j.Slf4j; + +import java.util.Optional; + +@Slf4j +@UtilityClass +public class JsonUtils { + + private final String EMPTY_OBJECT = "{}"; + private ObjectMapper objectMapper; + + public String objectToJson(Object object) { + try { + return getObjectMapper().writeValueAsString(object); + } catch (JsonProcessingException e) { + if (log.isDebugEnabled()) { + log.debug("Error serialize object {}", object, e); + } + return EMPTY_OBJECT; + } + } + + public Optional jsonToObject(String json, Class returnType) { + Optional result; + + try { + result = Optional.of(getObjectMapper().readValue(json, returnType)); + } catch (JsonProcessingException e1) { + e1.printStackTrace(); + result = Optional.empty(); + } + + return result; + } + + private ObjectMapper getObjectMapper() { + if (objectMapper == null) { + objectMapper = new ObjectMapper(); + } + + return objectMapper; + } +} diff --git a/src/main/java/mc/protocol/Utils.java b/src/main/java/mc/protocol/utils/Utils.java similarity index 91% rename from src/main/java/mc/protocol/Utils.java rename to src/main/java/mc/protocol/utils/Utils.java index d5fbe79..d4ce0c6 100644 --- a/src/main/java/mc/protocol/Utils.java +++ b/src/main/java/mc/protocol/utils/Utils.java @@ -1,4 +1,4 @@ -package mc.protocol; +package mc.protocol.utils; import lombok.experimental.UtilityClass;