gpt4 book ai didi

rest - Jersey REST 资源返回 HTTP 状态 405 - 方法不允许

转载 作者:行者123 更新时间:2023-11-28 21:59:43 25 4
gpt4 key购买 nike

我正在尝试使用 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;
}

}

最佳答案

由于某种原因,错误 405 突然变成了错误 415 - 不支持的媒体类型。那是因为 POSTMAN 没有正确设置标题。

然后我尝试了其他 Chrome 应用程序高级 REST 客户端...一旦我为 application/json 指定了 header ,一切就开始工作了。

我怀疑这意味着 POSTMAN 的问题多于代码的问题。

有时您必须在 SO 上提出问题才能找到自己的答案...

感谢收听。

关于rest - Jersey REST 资源返回 HTTP 状态 405 - 方法不允许,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38164029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com