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);
 }
}
asked Apr 19, 2018 at 1:32
\$\endgroup\$

1 Answer 1

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.
answered Apr 19, 2018 at 1:57
\$\endgroup\$
2
  • \$\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\$ Commented Apr 19, 2018 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\$ Commented Apr 19, 2018 at 2:06

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.