首页 > 解决方案 > 带有输入 json 的 curl POST 命令,请求 Jersey 服务,给出 HTTP 415 错误

问题描述

我尝试通过 curl 命令发送发布请求=>

curl -H 'Content-Type:application/json' -X POST
http://:8080/JerseyWeb/rest/restservice/remov eDBObjects -d '{"url": ":1521:orcl1","dbUser":" soumchat","dbPassword":"soumchat_123","sqlScriptFilePath":"D:\Issues\28344094 -POC-REPOSITORY 清理 - CONTENT\dropObjects\dropTablesViewsSequences.sql"}'

输出:

HTTP 状态 415 – 不支持的媒体类型类型状态报告

 Message Unsupported Media Type

说明 源服务器拒绝为请求提供服务,因为目标资源上的有效负载格式不受此方法支持

以下分别是我的 json 类、web.xml 和 rest webservice:

RestServices.java
--------------
    package com.jersey.service;

    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.LineNumberReader;
    import java.io.PrintWriter;
    import java.io.Reader;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.Statement;

    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.QueryParam;
    import javax.ws.rs.core.MediaType;
    import javax.ws.rs.core.Response;
    import javax.ws.rs.core.Response.Status;
    import com.jersey.service.json.Message;
    import com.jersey.service.json.SQLParam;

    @Path("/restservice")
    public class RestServices {
    private static final String DEFAULT_DELIMITER = 
    ";";

    private Connection conn;
    private boolean stopOnError;
    private boolean autoCommit;
    private PrintWriter logWriter = new 
    PrintWriter(System.out);
    private PrintWriter errorLogWriter = new 
    PrintWriter(System.err);

     private String delimiter = DEFAULT_DELIMITER;

    /*
     * @GET
     * 
     * @Path("/removeDBObjects")
     * 
     * @Produces(MediaType.TEXT_PLAIN) public Response 
      removeDBObjects() {
     * 
     * return Response.ok("Hello").build(); }
     */
      @POST
      @Path("/removeDBObjects")
      @Produces(MediaType.TEXT_PLAIN)
      @Consumes(MediaType.APPLICATION_JSON)
      public Response removeDBObjects1(SQLParam 
      sqlParams) {
        String url = sqlParams.getUrl();
        String dbUser = sqlParams.getDbUser();
        String dbPassword = sqlParams.getDbPassword();
        String       

       sqlScriptPath=sqlParams.getSqlScriptFilePath();
       try {
            DriverManager.setLoginTimeout(300);
            conn = getConnectionasDbUser(dbUser, 
            dbPassword, url);
            Reader reader = new BufferedReader(new 
            FileReader(new File(sqlScriptPath)));
            if (!(conn == null) && !(reader == null) 
            && reader.ready())
                runScript(conn, reader);
            return Response.ok("Hello").build();
            } catch (SQLException | IOException ex) {
            return Response.status
            (Status.INTERNAL_SERVER_ERROR).build();
            }
           }
           }

SQLParams.java
--------------
         package com.jersey.service.json;
         import 
         javax.xml.bind.annotation.XmlRootElement;

        @XmlRootElement
        public class SQLParam {
        private String url;
        private String dbUser;
        private String dbPassword;
        private String sqlScriptFilePath;

        public SQLParam() {

        }

        public SQLParam(String url, String dbUser, 
        String dbPassword, String sqlScriptFilePath) {
          this.url = url;
          this.dbUser = dbUser;
          this.dbPassword = dbPassword;
          this.sqlScriptFilePath = sqlScriptFilePath;
        }

        public void setUrl(String url) {
          this.url = url;
        }

        public void setDbUser(String dbUser) {
          this.dbUser = dbUser;
        }

        public void setDbPassword(String dbPassword) {
            this.dbPassword = dbPassword;
        }

        public void setSqlScriptFilePath(String 
        sqlScriptFilePath) {
             this.sqlScriptFilePath = 
         sqlScriptFilePath;
        }

        public String getUrl() {
            return url;
        }

        public String getDbUser() {
             return dbUser;
        }

        public String getDbPassword() {
             return dbPassword;
        }

        public String getSqlScriptFilePath() {
             return sqlScriptFilePath;
        }

       @Override
       public String toString() {
            return new   
         StringBuffer("url:").
         append(this.url).append(",dbUser:")
        .append(this.dbUser)
        .append(",dbPassword:") 
        .append(this.getDbPassword())
        .append(",sqlScriptFilePath:")
        .append(this.sqlScriptFilePath).toString();
      }
      }

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" 
      xsi:schemaLocation="http://java.sun.com
      /xml/ns/javaee 
      http://java.sun.com/xml/ns/javaee/web- 
      app_3_0.xsd" id="WebApp_ID" version="3.0">
      <display-name>com.jersey.service</display-name>
      <servlet>
      <servlet-name>jersey_servlet</servlet-name>
      <servlet-class>com.sun.jersey.spi.container
      .servlet.ServletContainer</servlet-class>
      <!-- Register resources and providers under 
      com.vogella.jersey.first package. -->
      <init-param>
            <param- 
            name>jersey.config.server.provider
            .packages</param-name>
            <param-value>com.jersey.service</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_servlet</servlet-name>
         <url-pattern>/rest/*</url-pattern>
         </servlet-mapping>
         </web-app>
JARs
-----
      asm.jar
      jersey-client-1.10.jar
      jersey-core.jar
      jersey-json-1.18.3.jar
      jersey-multipart.jar
      jersey-server.jar
      jersey-servlet.jar
      json.jar

What am I missing?
> Blockquote

标签: javacurljersey-1.0

解决方案


CURL 命令中的 Content-Type 不正确。请使用以下作为示例。内容类型:应用程序/xml


推荐阅读