我正在尝试通过curl命令将JSON字符串传递给POST方法。但是,我收到HTTP 1.1 404 Not Found错误。我正在尝试创建一个简单的Web服务,它将传递给它的JSON字符串来填充mysql数据库。
这是我的DAO类,用于执行GETS和POSTS。
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class PersonDAO {
public List<Person> findAll() {
List<PErson> list = new ArrayList<Person>();
Connection c = null;
String sql = "SELECT * FROM person ORDER BY firstName";
try {
c = ConnectionHelper.getConnection();
Statement s = c.createStatement();
ResultSet rs = s.executeQuery(sql);
while (rs.next()) {
list.add(processRow(rs));
}
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
ConnectionHelper.close(c);
}
return list;
public Person create(Person person) {
Connection c = null;
PreparedStatement ps = null;
try {
c = ConnectionHelper.getConnection();
ps = c.prepareStatement("INSERT INTO Person (firstName,lastName) VALUES (?, ?)",
new String[] { "ID" });
ps.setString(1, person.getfirstName());
ps.setString(2,person.getlastName());
ps.executeUpdate();
ResultSet rs = ps.getGeneratedKeys();
rs.next();
int id = rs.getInt(1);
person.setId(id);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
ConnectionHelper.close(c);
}
return person;
}
protected Person processRow(ResultSet rs) throws SQLException {
Person person = new Person();
person.setfirstName(rs.getString("firstname"));
person.setlastName(rs.getString("lastname"));
return person;
}
我的POJO
@XmlRootElement
public class Person{
private Integer id;
private String firstName;
private String lastName;
//GETTERS AND SETTERS
}
我的注释的人员资源类:
@Path("/people")
public class PersonResource{
PersonDAO dao = new PersonDAO();
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Person> findAll(){
System.out.println("findAll");
return dao.findAll();
}
@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Person creare(Person person){
System.out.println("creating person");
return dao.create(person);
}
当我发出GET curl命令时,它工作正常,它返回人员表中的所有值。但是,如果我发出POST curl命令,我会收到以下错误:
HTTP/1.1 404 Not Found
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=utf-8
Content-Length: 1025
Date: Thu, 27 Dec 2012 01:33:41 GMT
<html><head><title>Apache Tomcat/7.0.32 - Error report</title><style> [...]
请让我知道我哪里出错了。
答案 0 :(得分:2)
在POST before方法中,添加PATH,试一试。
答案 1 :(得分:1)
我假设您在发出的命令中必须缺少 -H'Content-Type:application / json'。
答案 2 :(得分:1)
我遇到了完全相同的问题并且发现它与Spring Security有关。使用类似以下内容的方法提高日志记录库中spring security的日志记录级别:
logging.level.org.springframework.security.web: DEBUG
之后,当您发送请求时,您可以看到在过滤器链上执行的最后一个过滤器是什么。在我的例子中,它是CsrfProtectionFilter。我禁用它,它工作。
如果这没有帮助,也可以尝试启用REST框架的跟踪。这也可以给你一个线索。你可以通过以下方式在球衣上做到:
HashMap<String, Object> map = new HashMap<String, Object>();
map.put(ServerProperties.TRACING, "ALL");
this.addProperties(map);