2018-10-13 JsonMapping

자바객체를 이용해서 Json매핑하기

  • 슬랙에서 메세지를 보내기 위해서는 알맞은 형태의 Json타입으로 전송을 해야된다.
  • 주식객체를 가지고 Json을 메핑을 했다.
{
 "username":"jimmy",
 "channel":"test",
 "attachments":[
	{
	 "color":"#CC0000",
	 "title":"<http://www.naver.com|삼성전자> : 10.0",
			"fields":[
				{
					"title":"주가", "value":50000,"short":"true"
				},
				{
					"title":"변동률", "value":2.0,"short":"true"
				},
				{
					"title":"변동가격", "value":1000,"short":"true"
				}
				],
			"footer":"MADE BY JIMMY"
		}
	]
}

  • 위와 같은 형태로 변환을 해야한다.
public class StockJsonDto {
    private static final Logger logger =  LoggerFactory.getLogger(StockJsonDto.class);
    private Stock stock;

    public StockJsonDto(Stock stock) {
        this.stock = stock;
    }

    public JsonObject makeJson() {
        JsonObject object = new JsonObject();
        object.addProperty("username", "jimmyBot");
        object.addProperty("channel","test");
        object.add("attachments", attachements());
        return object;
    }

    public JsonArray attachements() {
        JsonArray attachments = new JsonArray();
        JsonObject attach = new JsonObject();
        attach.addProperty("color", "#CC0000");
        attach.addProperty("title", "<" + getStock().getDetailUrl() + " |" + getStock().getName() + ">");
        attach.add("fields", makeFileds());
        attach.addProperty("footer", "MADE BY JIMMY");
        attachments.add(attach);
        return attachments;
    }

    public JsonArray makeFileds() {
        String [] titles = {"주가", "변동률", "변동가격"};
        Double [] values = {(double)getStock().getCost(), getStock().getRate(), (double)getStock().getUpdn()};
        JsonArray fields = new JsonArray();
        for (int i = 0; i < titles.length; i++) {
            JsonObject field = new JsonObject();
            field.addProperty("title", titles[i]);
            field.addProperty("value", values[i]);
            field.addProperty("short", true);
            fields.add(field);
        }
        return fields;
    }

    public Stock getStock() {
        return stock;
    }
}
  • StockJsonDto에서 Stock객체를 받으면 그것을 바탕으로 위와같은 Json타입으로 변환을 해준다.
  • Json의 value타입으로 Array가 있어서 문제해결에 이슈가 있었는데, 이 부분에 대한것을 Gson의 JsonArray를 이용을 해서 해결을 했다.

느낀점

  • 뭔가 깔끔하게 설계를 하고 싶은데, 많이 찜찜하다.
Written on October 13, 2018