angularjs 使用JSON发送请求返回错误405:不允许使用方法

t40tm48m  于 2022-11-21  发布在  Angular
关注(0)|答案(3)|浏览(154)

我尝试通过单击“编辑”按钮将intakeanswers.json从AngularJS表单发送到java Web服务,但收到错误消息:
“405不允许的方法”。
我的JSON可以吗?
AngularJS和HTML:

<!DOCTYPE html>
<html ng-app="myappp">
    <head>
        <meta charset="ISO-8859-1">
        <title>Insert title here</title>
        <script src="lib/js/angular.min.js"></script>
        <script src="lib/js/angular-route.min.js"></script>
        <script src="lib/js/angular-ui-router.min.js"></script>
    </head>
    <body ng-controller="edit_ctrl">

        <script type="text/javascript">
            var myapp = angular.module('myappp', []);
            myapp.controller('edit_ctrl', function($scope, $http) {
                $http.get("data/intakeanswers.json").success(function(data) {
                    $scope.dataJson=data;
                });
                $scope.doEdit = function() {
                    $scope.dataJs = angular.copy($scope.dataJson);
                    var dat = angular.toJson($scope.dataJs);
                    alert("hi");
                    $http({
                         url: "http://localhost:8080/...../FormAnswers/Answers",
                         method: 'POST',
                         data: dat,
                         headers: {'Content-Type': 'application/Json'},
                    })
                };          
            });
        </script>
        <button ng-click="doEdit()">Edit</button>
    </body>
</html>

Java REST Web服务代码:

@Path("/FormAnswers")
public class FormAnswersService {

    private static final Logger logger = Logger.getLogger(FormAnswersService.class);

    @GET
    @Path("/Answers")
    @Produces(MediaType.TEXT_PLAIN)
    @Consumes(MediaType.APPLICATION_JSON)
    public String getAnswers(String id) {
        try {       
            System.out.println(id);     
        }
        catch(Exception e) {
            logger.error(e.getMessage());           
        }
        return "response";  
    }
}

JSON格式:

{ 
    "User_Id": "abcd",
    "Form_Name": "Form",
    "Answers": [{
            "Question_Id": "1",
            "Answer" :"a"
        },
        {
            "Question_Id": "2",
            "Answer" :"b"
        },
        {
            "Question_Id": "3",
            "Answer" :"c"
        }
    ],
    "Section_Name": "Project Overview",
    "Answers": [{
            "Question_Id": "4",
            "Answer" :"d"
        },
        {
            "Question_Id": "5",
            "Answer" :"e"
        },
        {
            "Question_Id": "6",
            "Answer" :"f"
        }
    ]       
}
5w9g7ksd

5w9g7ksd1#

您的Web服务控制器只声明了GET方法实现。您需要添加对POST的支持:

@POST
@Path("/Answers")
@Consumes(MediaType.APPLICATION_JSON)
public Response setAnswers(String data) {

}

因为您的Web服务不支持POST,所以应该是405。

6jygbczu

6jygbczu2#

您的Web服务代码需要GET请求,而您正在发送POST。
在这种情况下,我会期待一个405。
变更:

@GET
@Path("/Answers")
@Produces(MediaType.TEXT_PLAIN)
@Consumes(MediaType.APPLICATION_JSON)

收件人:

@POST
@Path("/Answers")
@Produces(MediaType.TEXT_PLAIN)
@Consumes(MediaType.APPLICATION_JSON)

正如下面所指出的,这将让你通过405(因为你将使用正确的http请求方法,但你的java服务仍然无法工作。你的端点正在期待一个字符串和你的POST'ing一个json文件。你将需要返回一个响应,并将需要解析你的java中的json,除非我是非常错误的。我对java几乎没有经验,因此无法提供帮助。

798qvoo8

798qvoo83#

如果服务只需要一个id值来检索答案,那么您可以使用params属性单独发送id,而不是发送JSON,但这会在url中暴露id。
示例:$http.get(“/url/",{参数:{“参数1”:“参数2”:val 2}})。然后(/* */)...
注意事项:要检查从浏览器发送到服务的请求类型,请在chrome中1.按Ctrl+F12。这将打开调试对话框。2.刷新页面或调用服务。3.在“网络”选项卡中,所有对服务的请求调用都将被记录。2单击服务url 4。3在右侧将显示请求详细信息。4在其中选择标题选项卡。 checkout 第5节“常规”下的“请求方法:”属性。这将显示从浏览器发送的请求类型。这将确认您的更改是否生效。

相关问题