Consume Json in REST post jersy

571 Views Asked by At

I am trying to consume json object in rest service,and convert it to local bean pojo jaxb class and use it for further processing.

Here is my webservice code:

@POST
@Path("login1")
@Consumes(MediaType.APPLICATION_JSON)
public String login1(LoginJSON data)
{   
    try
    {
        System.out.println("request received for user"+data.username);
        System.out.println("pass: "+data.password);

    } catch (Exception e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return "success";
}

Here is pojo class:

@XmlRootElement
public class LoginJSON
{
    @XmlElement(required=true) 
    public String username;

    @XmlElement(required=true) 
    public String password;

    public LoginJSON()
    {
        super();
        // TODO Auto-generated constructor stub
    }
    public LoginJSON(String username, String password)
    {
        super();
        this.username = username;
        this.password = password;
    }
    public String getUsername()
    {
        return username;
    }

    @XmlElement
    public void setUsername(String username)
    {
        this.username = username;
    }

    public String getPassword()
    {
        return password;
    }

    @XmlElement
    public void setPassword(String password)
    {
        this.password = password;
    }
}

web.xml is :

<servlet>
    <servlet-name>jersey-serlvet</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer
    </servlet-class>
   <init-param>
      <param-name>com.sun.jersey.config.property.packages</param-name> 
      <param-value>com.myapp.webservices</param-value>
   </init-param>
   <load-on-startup>1</load-on-startup>
 </servlet> 

Webservice client is sending a json object with both user and password attribute.Error I am getting is :

INFO: No default constructor found on class 
com.myapp.webservices.LoginJSON
java.lang.NoSuchMethodException: com.myapp.webservices.LoginJSON.<init>()
at java.lang.Class.getConstructor0(Unknown Source)
at java.lang.Class.getDeclaredConstructor(Unknown Source)
at com.sun.xml.internal.bind.v2.ClassFactory.create0(Unknown Source)

....

How do I resolve this any suggestions?

2

There are 2 best solutions below

1
On BEST ANSWER

Remove the constructors used in the class LoginJSON

public LoginJSON() { super(); // TODO Auto-generated constructor stub } public LoginJSON(String username, String password) { super(); this.username = username; this.password = password; } Let the class to use the default constructor, otherwise the json won't be parsed to LoginJSON.

2
On

The most simple library for processing JSON in java is org.json, you don't need a POJO class:

@POST
@Path("login1")
@Consumes(MediaType.APPLICATION_JSON)
public String login1(LoginJSON data) { 

    JSONObject dataJSON = new JSONObject(data);
    String username = dataJSON.get("username").toString();
    String password = dataJSON.get("password").toString();

    //...
    return "success";
}