1

curl コマンドを使用して JSON 文字列を POST メソッドに渡そうとしています。しかし、HTTP 1.1 404 Not Found エラーが表示されます。JSON文字列が渡されてmysqlデータベースにデータが入力される単純なWebサービスを作成しようとしています。

これは、GETS と POSTS を実行するために使用される私の DAO クラスです。

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
}

注釈用の My Person Resource クラス:

@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 コマンドを発行すると、正常に動作し、person テーブルのすべての値が返されます。ただし、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> [...]

どこが間違っているのか教えてください。

4

3 に答える 3

3

発行するコマンドで-H 'Content-Type:application/json'が欠落しているに違いないと思います。

于 2012-12-27T04:26:56.677 に答える
2

POST before メソッドに PATH を追加して、試してみてください。

于 2012-12-27T01:45:42.617 に答える
2

私はまったく同じ問題を抱えていて、それがSpring Securityに関連していることを理解しました。次のようなものを使用して、ロギング ライブラリの Spring セキュリティのロギング レベルを上げます。

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);
于 2014-08-15T09:02:17.147 に答える