为了账号安全,请及时绑定邮箱和手机立即绑定

Java REST 服务在 POST 上生成 405

Java REST 服务在 POST 上生成 405

Smart猫小萌 2021-09-12 16:45:18
我正在开发 JAX-RS REST 服务。我正在使用 Java 1.8、Tomcat 7,并通过 JQuery/AJAX 调用我的 POST。我的 JQuery 代码非常简单:$.post(ctx + "/addressinfo/", data, null, "json")其中 data 是一个包含基本地址信息的简单 JSON 对象。我的 REST 控制器如下:package addressservice.controller;import javax.servlet.*;import javax.ws.rs.Consumes;import javax.ws.rs.GET;import javax.ws.rs.POST;import javax.ws.rs.Path;import javax.ws.rs.Produces;import javax.ws.rs.core.Context;import javax.ws.rs.core.MediaType;import javax.ws.rs.core.Response;import com.goodyear.menuadmin.plantservice.model.PlantInfo;import com.goodyear.menuadmin.plantservice.service.PlantInfoService;@Path("/")public class AddressController {    private AddressService service = new AddressService ();    private Address address;    @GET    @Produces(MediaType.APPLICATION_JSON)    public Response getAddress(@Context ServletContext ctx) throws Exception {        this.address= plantService.getInfo("Name");        return Response.ok(this.plant, MediaType.APPLICATION_JSON).build();    }    @POST    @Consumes(MediaType.MEDIA_TYPE_WILDCARD)    private Response saveAddress(Address data) {        boolean isOk = addressService.updateInfo(data);        if(!isOk) {            Response.serverError().build();        }        return Response.ok(data, MediaType.APPLICATION_JSON).build();    }}但是,当我执行此操作时,我收到 405 Method Not Allowed 错误。帖子是通过单击表单按钮启动的。GET 部分工作正常。响应头是:HTTP/1.1 405 Method Not AllowedServer: Apache-Coyote/1.1Allow: HEAD,GET,OPTIONSContent-Length: 0Date: Mon, 10 Sep 2018 17:58:08 GMT我尝试了几种不同的尝试来纠正这个问题,包括将此 init 参数添加到我的 tomcat web.xml<init-param>  <param-name>readonly</param-name>  <param-value>false</param-value></init-param>我尝试从$.post以下更改为:return $.ajax({   url: ctx + "/addressinfo/",   type: 'post',   dataType: 'json',   contentType: 'application/json',   data: JSON.stringify(data)});似乎没有什么允许我发布到我的 REST 服务。我需要在 Tomcat 配置中更改某些内容吗?还是我做错了什么?我想我可以从 REST 服务更改为 servlet,但我宁愿不必这样做。
查看完整描述

2 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

@POST 的 Java 方法是private,它应该是public。Jersey 忽略控制器中的私有方法。


查看完整回答
反对 回复 2021-09-12
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

saveAddress 只消耗数据不产生

所以实施

@Produces

在 saveAddress 中


查看完整回答
反对 回复 2021-09-12
  • 2 回答
  • 0 关注
  • 131 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信