Java REST 服务在 POST 上生成 405

我正在开发 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 Allowed

Server: Apache-Coyote/1.1

Allow: HEAD,GET,OPTIONS

Content-Length: 0

Date: 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,但我宁愿不必这样做。


Smart猫小萌
浏览 132回答 2
2回答

拉莫斯之舞

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

江户川乱折腾

saveAddress 只消耗数据不产生所以实施@Produces在 saveAddress 中
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java