我正在尝试使用Tomcat 7和Jersey 2构建一个简单的REST JSON api .GET全部工作得很好。但是POST / PUT返回了可怕的405.
我知道这是一个很受欢迎的问题。但我已经研究了所有其他答案,他们在我的案例中没有帮助。
我在本地Linux工作站上运行它。我使用真正的Oracle JDK,Eclipse Mars,Tomcat 7和Maven来处理依赖项。
作为同一个应用程序的一部分,我还有一个传统的jsp / servlet接口,可以很好地完成CRUD操作。所以POST正在为servlet工作。
当POST / PUT失败时,在tomcat日志中没有连接的记录。我在Chrome中使用POSTMAN应用生成请求。
我尝试了各种各样的排列,但没有任何影响。我怀疑看代码不会透露一个简单的答案。但它在下面。
有人可以建议一个方法来调试吗?如果它没有在服务器上失败。它在哪里?
非常感谢
我正在使用Servlet 3,因此无需在web.xml中定义它
DAO的所有内容都在运行,所以我会跳过那段代码......
RestApplication.java
package resources;
import javax.ws.rs.ApplicationPath;
import org.glassfish.jersey.server.ResourceConfig;
@ApplicationPath("rest")
public class RestApplication extends ResourceConfig {
public RestApplication() {
packages("resources");
}
}
PersonResource.java
package resources;
import java.util.List;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
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 org.apache.commons.lang3.StringUtils;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import dao.PersonDAO;
import model.Person;
@Path("/persons")
public class PersonResource {
private MongoClientURI cs;
private MongoClient mc;
private PersonDAO personDAO;
public PersonResource() {
super();
cs = new MongoClientURI("mongodb://localhost:27017");
mc = new MongoClient(cs);
personDAO = new PersonDAO(mc);
}
@Path("/")
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Person> getPersonsAll() {
List<Person> persons = personDAO.getAllPerson();
return persons;
}
@Path("/add")
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response addPerson(Person person) {
personDAO.createPerson(person);
return Response.status(201).build();
}
@Path("/get/{id}")
@GET
@Produces(MediaType.APPLICATION_JSON)
public Person getPersonById(@PathParam("id") String id) {
Person person = new Person();
if (StringUtils.isNotEmpty(id)) {
person.setId(id);
person = personDAO.getPerson(person);
}
return person;
}
}
答案 0 :(得分:1)
由于某种原因,错误405突然变为错误415 - 不支持的媒体类型。然后是因为POSTMAN没有正确设置标题。
然后我尝试了其他Chrome App高级REST客户端...一旦我为application / json指定了标题,一切都开始工作了。
我怀疑这意味着POSTMAN比代码更容易出问题。
有时您必须在SO上提出问题才能找到自己的答案......
感谢收听。