【问题标题】:415 Error when using POST in Java REST web services using poster extension使用海报扩展在 Java REST Web 服务中使用 POST 时出现 415 错误
【发布时间】:2016-07-11 16:37:58
【问题描述】:

我正在传递 JSON 数据,例如

{
    "empname" : "seo"
}  

POST 网址,但它返回 415 错误,即 不支持的媒体类型
排除故障后,我发现 content-type 应该是 "application/json" 在海报扩展中,我尝试了相同的方法但没有成功。
以下是我的服务代码

package webService;

import java.sql.Connection;
import java.util.ArrayList;

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import com.google.gson.Gson;

import dao.Database;
import dao.Project;
import dto.FeedObjects;
import model.ProjectManager;


@Path("/WebService")
public class FeedService 
{
    @GET
    @Path("/GetFeeds")
    @Produces("application/json")
    public String feed()
    {
    String feeds = null;
    try
    {
    ArrayList<FeedObjects> feedData = null;
    ProjectManager projectManager= new ProjectManager();
    feedData = projectManager.GetFeeds();
    Gson gson = new Gson();
    System.out.println(gson.toJson(feedData));
    feeds = gson.toJson(feedData);
    }

    catch (Exception e)
    {
    System.out.println("Exception Error"); //Console 
    }
    return feeds;
    }

    @GET
    @Path("/insert/{empname}/{empsalary}")

    public String insertEmpName(@PathParam("empname") String empname,@PathParam("empsalary") String empsalary) {

        String result = "Employee Insertion Failed!!!!";
        try {

            Database database = new Database();
            Connection connection = database.Get_Connection();

            Project n = new Project();
            boolean b = n.insertEmpName(connection, empname,empsalary);

            if (b == true) {
                result = "Employee Added SuccessFully!!!!";

            } else {
                result = "Employee Already Exists!!!";
            }

        } catch (Exception e) {
            System.out.println(e);
        }

        return result;

    }

    @POST
    @Path("/justTesting")
    @Consumes(MediaType.APPLICATION_JSON)
    public Response myresponse(FeedObjects fb)
    {
        System.out.println("Name is "+fb.getEmpname());
        return Response.status(201).entity("Tested !!").build();

    }


}  

这是我的类,其中包含变量的 setter 和 getter,我将它们作为参数传递给上述方法并使用其对象调用,即 fb

package dto;

public class FeedObjects
{

private String empname;
private String empsalary;
public FeedObjects() {
    // TODO Auto-generated constructor stub
}
public String getEmpname() {
    return empname;
}
public void setEmpname(String empname) {
    this.empname = empname;
}
public String getEmpsalary() {
    return empsalary;
}
public void setEmpsalary(String empsalary) {
    this.empsalary = empsalary;
}

}  

Web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>FirstProject</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
    <servlet>
        <servlet-name>ServletAdaptor</servlet-name>
        <servlet-class>
            com.sun.jersey.server.impl.container.servlet.ServletAdaptor
            </servlet-class>
<init-param>
  <param-name>com.sun.jersey.config.property.packages</param-name>
  <param-value>webService</param-value>
</init-param>
            <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletAdaptor</servlet-name>
        <url-pattern>/REST/*</url-pattern>
    </servlet-mapping>
</web-app>

包含的库如下:

  • asm-3.1.jar
  • gson-2.2.1.jar
  • jersey-client-1.0.3.jar
  • jersey-core-1.0.3.jar
  • jersey-server-1.0.3.jar
  • joda-time-2.0.jar
  • jsr311-api-1.0.jar
  • mysql-connector-java-5.0.8-bin.jar

所以请帮我解决这个错误。我是 Java REST Web 服务的新手,但我正在努力解决这个问题。

【问题讨论】:

  • 您在路径参数和表单参数之间搞错了。你能分享你试过的网址吗
  • http://:/WebService/insert/seo/50000
  • 是的,当您有最少字段时插入记录,但假设您有超过 30 个字段要插入,则 url 不允许插入,所以请参阅第三部分,即 POST 一个带有路径的“ justTesting”。在这里我想以 JSON 的形式发送数据来测试 url,以便以后我的应用程序可以使用它。我希望我很清楚
  • 将其作为表单参数发送。并在您的方法中使用@FormParam
  • 我该如何使用它?您可以发布一些示例或链接吗?

标签: java json web-services rest jar


【解决方案1】:

我通过将gensonlibrary 添加到我的项目jar 中解决了我以JSON 形式向POST url 发送数据的问题。它提供了将 Java 对象序列化为 JSON 并将 JSON 流反序列化为 Java 对象的方法。它是一个 jsonjava 流和数据绑定 api。它与球衣很好地融合在一起。这是Link
感谢 Stackoverflow 和 Lathy 帮助我 :)

【讨论】:

    【解决方案2】:

    嗨,Siddhesh Kalgaonkar,

    Check this out

    【讨论】:

    • 看起来很漂亮。谢谢@Lathy,但你有任何使用 JSON 的解决方案吗?因为在这个解决方案中,我需要为 30 个字段传递 30 个变量。
    • 我现在没有代码.. 但你可以使用 Jackson 将 json 解析为 java 对象。
    • 我试过 [这个链接] (mkyong.com/webservices/jax-rs/json-example-with-jersey-jackson) 但徒劳无功:(
    • 415 : 不支持的媒体类型
    • 在示例中,作者使用 REST 客户端发送 json(作为字符串)。你也这样做了吗?
    猜你喜欢
    • 2016-05-02
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    相关资源
    最近更新 更多