简体   繁体   中英

POST to Jersey REST service getting error 415 Unsupported Media Type when I try to consume JSON data

I am using a JAX-RS web application with Jersey and Tomcat. Post requests are fine however when I try to consume JSON data I get an HTTP status 415 - Unsupported Media Type.

Here is my Code:

package com.sms.presentationT;
import java.io.Serializable;
import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.json.simple.JSONObject;
import org.json.simple.parser.ParseException;
import com.sms.userServices.*;
import com.sms.Registrations.Regitration;
import com.sms.persistenceT.*;
import com.sms.persistenceT.*;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

@Path("/user-servicesLogincheck1")
public class Check implements Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    @POST
    @Path("/LoginPagecheck1")
    //@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
    @Consumes(MediaType.APPLICATION_JSON)
    //@Produces("application/json")
    @Produces(MediaType.APPLICATION_JSON)
    public Regitration loginUserInfo(@FormParam("logusertype") String logUserType, @FormParam("userNAME") String UserNAME,*emphasized text* @FormParam("PassWORD") String PAssWORD) throws ParseException
    {

        System.out.println(logUserType+UserNAME+PAssWORD);

        LoginUserServiceCheck LUS = new LoginUserServiceCheck();
        JSONObject jobj2 = new JSONObject();
        jobj2 = LUS.LoginInputDatacheck(logUserType,UserNAME, PAssWORD);

        System.out.println("ssssssssssssssssssssssssssss");

        System.out.println("Presentation jobj"+jobj2);


        String jsonText = jobj2.toJSONString();
        System.out.println(jsonText);

        JSONParser parser = new JSONParser();

        JSONObject newJObject = null;

        try {
            newJObject = (JSONObject) parser.parse(jsonText);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        //System.out.println(LUS.loginresponse);
        //System.out.println(LUS.resultStatus);
        /*
        if(LUS.resultStatus)
        { 
            System.out.println(LUS.loginresponse);


            return LUS.loginresponse;
            //return "UserName is valid";
        }
        else
        {
            return LUS.loginresponse;
        }

        */

        System.out.println(newJObject.get("Name"));
        System.out.println(newJObject.get("Email"));

        Regitration rg = new Regitration();

        rg.setUserType(logUserType);
        rg.setName((String)newJObject.get("Name"));
        rg.setEmail((String)newJObject.get("Email"));
        rg.setUserName((String)newJObject.get("userName"));
        rg.setPassword((String)newJObject.get("password"));
        rg.setConfirmPasssword((String)newJObject.get("password"));
        rg.setBirthDay((String)newJObject.get("birthday"));
        rg.setGender((String)newJObject.get("Gender"));
        rg.setMobileNo((String)newJObject.get("mobileNo"));
        rg.setCurrentAddress((String)newJObject.get("currentAddress"));

        rg.setPermenantAddress((String)newJObject.get("PermenantAddress"));
        rg.setCountry((String)newJObject.get("Country"));
        rg.setState((String)newJObject.get("state"));
        rg.setCity((String)newJObject.get("City"));

        rg.setLandmark((String)newJObject.get("Landmark"));
        rg.setZipCode((String)newJObject.get("ZipCode"));
        return rg;
    }

}

here is my web.xml file

<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Restful Web Application</display-name>

<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.sms.presentationT</param-value>
    </init-param>

    <init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
         <param-value>true</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>jersey-serlvet</servlet-name>
    <url-pattern>/pages/rest/*</url-pattern>
</servlet-mapping>

here is my POM.xml file

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mkyong.common</groupId>
<artifactId>RESTfulExample</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>RESTfulExample Maven Webapp</name>
<url>http://maven.apache.org</url>

<repositories>
    <repository>
        <id>maven2-repository.java.net</id>
        <name>Java.net Repository for Maven</name>
        <url>http://download.java.net/maven/2/</url>
        <layout>default</layout>
    </repository>
</repositories>

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.8.2</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-server</artifactId>
        <version>1.8</version>
    </dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.40</version>
</dependency>
<dependency>
    <groupId>com.sun.jersey.contribs</groupId>
    <artifactId>jersey-multipart</artifactId>
    <version>1.8</version>
</dependency>   
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-json</artifactId>
    <version>1.18</version>
</dependency>

 <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
        <version>20141113</version>
    </dependency>

    <dependency>
        <groupId>org.glassfish</groupId>
        <artifactId>javax.json</artifactId>
        <version>1.0.4</version>
    </dependency>

     <dependency>
        <groupId>com.googlecode.json-simple</groupId>
        <artifactId>json-simple</artifactId>
        <version>1.1</version>
    </dependency>

    <dependency>
        <groupId>com.owlike</groupId>
        <artifactId>genson</artifactId>
        <version>0.99</version>
    </dependency>

    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.3.1</version>
    </dependency>

</dependencies>

<build>
    <finalName>RESTfulExample</finalName>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
    </plugins>
</build>

I would like to point out your disuse of the java naming conventions.

Your REST endpoint expects form data but you have indicated that it consumes JSON. You should have your REST endpoint consume form data ie @Consumes(MediaType.APPLICATION_FORM_URLENCODED) Alternatively you can change the FormParam method parameters to POJO that matches your JSON object or a String parameter and then deserialize your JSON string to a POJO.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM