java - 带有输入 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
解决方案
CURL 命令中的 Content-Type 不正确。请使用以下作为示例。内容类型:应用程序/xml
推荐阅读
- mongodb - MongoDB:amazon linux 2上的安装错误
- amazon-web-services - AWS 中是否有用于调试信息的日志记录服务?
- fiddler - FiddlerScript 类参考?
- javascript - 反应路由器:新组件仅在现有视图上呈现
- reactjs - 带有打字稿的 react-apollo 停止工作
- javascript - 如何使用 VueJS 限制对未登录用户的页面访问?
- android - 在 Oreo 的 JobInetentService 中的 requestLocationUpdates 出现错误
- java - 在 Java 中使用 Scanner 输入数据
- python - 安装的 virtualenv 会出现一些错误
- ms-access - MS Access - 寻找更好的方法来创建和编辑记录