2
\$\begingroup\$

I am pretty new to Java and I got a requirement of converting Strings to a json structure. My below codes works fine but I have to create multiple objects and my code looks bit ugly. I want to know the better approach.

I want the below Json Structure from three Strings SourceApplication, messagType and payload

Required Json Structure

{
    "request": {
        "header": {
            "sourceApplication": "SomeString"
            "messageType": "SomeString"
        },
        "body": {
            "payload": "SomeString"
        }
    }
}

Below is my code.

POJO Class (For mapping)

package com.test.transformer;

import java.io.Serializable;


public class JsonMapper implements Serializable {

    private Request request;

    public Request getRequest ()
    {
        return request;
    }

    public void setRequest (Request request)
    {
        this.request = request;
    }


    public static class Request implements Serializable{

        private Body body;

        private Header header;

        public Body getBody ()
        {
            return body;
        }

        public void setBody (Body body)
        {
            this.body = body;
        }

        public Header getHeader ()
        {
            return header;
        }

        public void setHeader (Header header)
        {
            this.header = header;
        }


    }

    public static class Header implements Serializable{

        private String sourceApplication;
        private String messageType;

        public String getSourceApplication ()
        {
            return sourceApplication;
        }

        public void setSourceApplication (String sourceApplication)
        {
            this.sourceApplication = sourceApplication;
        }

        public String getMessageType ()
        {
            return messageType;
        }

        public void setMessageType (String messageType)
        {
            this.messageType = messageType;
        }

    }

    public static class Body implements Serializable{

        private String payload;

        public String getPayload ()
        {
            return payload;
        }

        public void setPayload (String payload)
        {
            this.payload = payload;
        }
    }

}

My Main Class

package com.test.transformer;

import org.codehaus.jackson.map.ObjectMapper;

import java.io.IOException;


public class JsonTest {

    public static  void main(String[] args) {

        ObjectMapper mapper = new ObjectMapper();


        String srcApp = "TestSrc";
        String msgType = "msgtype";
        String payload = "mainMsg";

        JsonMapper.Header h = new JsonMapper.Header();
        JsonMapper.Body b = new JsonMapper.Body();
        JsonMapper.Request r = new JsonMapper.Request();

        h.setSourceApplication(srcApp);
        h.setMessageType(msgType);
        b.setPayload(payload);

        r.setHeader(h);
        r.setBody(b);

        JsonMapper j = new JsonMapper();

        j.setRequest(r);

        String jsonInString = null;
        try {
            jsonInString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(j);
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println(jsonInString);
    }
}
\$\endgroup\$
1
\$\begingroup\$

A few things:

  • Use descriptive variable names. A common Java convention is a camelCase version of the class name such as JsonMapper jsonMapper = new JsonMapper();
  • Unwrap your classes into separate files. This makes the code much easier to read and reuse.
  • test in your package name is very unusual, and probably not intended.
  • Test classes typically have the same name as the class they test suffixed with Test, such as JsonMapperTest.
  • Tests are not written in main methods.
  • Having getters and setters for everything is a code smell - not necessarily bad, but often misused. Your application doesn't do anything yet, so it's difficult to tell whether any of them will be necessary, but in general I would not add getters and setters until I know I need them.
\$\endgroup\$
  • \$\begingroup\$ Thanks for the feedback. Other than standard things, the way I implemented is fine right? I will take care of things you mentioned. \$\endgroup\$ – sparker Apr 19 '18 at 2:02
  • \$\begingroup\$ Once you do you could post another question here to get further feedback. It's a bit easier to give feedback when the overall structure is in order. \$\endgroup\$ – l0b0 Apr 19 '18 at 2:06

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.