对Jersey的Angular JS post对象为null

时间:2015-04-12 13:45:05

标签: angularjs jersey jax-rs

我正在尝试使用angular js和jersey将表单数据发布到我的休息服务。但是,在休息服务中收到的bean为null。以下是我的POST请求的角度代码。

(function() {
var dataUrls = {
    addSurveyUrl : '/CompanySurveyPortal/Company/Surveys/addSurvey'
}

angular.module('addNewSurvey', []).service('addSurveyDataService',
        function($http) {
            this.addNewSurvey = function(survey)
            {
                return $http.post(dataUrls.addSurveyUrl, {"surveyId": survey.surveyId, "title": survey.question, "choice1": survey.firstOption, "choice2": survey.secondOption ,"status": 'Open'});

            };
        })

        .controller('AddNewSurveyController', function($scope, $log, responseDataService, $stateParams, $state, $filter, $rootScope, addSurveyDataService){
            this.survey = {};
            this.addSurvey = function(){
                addSurveyDataService.addNewSurvey(this.survey);

            };
            function init(){

            }
            init();
        })

})();

表单中的数据已成功填充在$ http.post语句中。然而,每次使用请求的方法中的bean都为null。

@POST
@Path("addSurvey")
@Produces(MediaType.TEXT_HTML)
@Consumes(MediaType.APPLICATION_JSON)
public void addNewSurvey(@BeanParam Survey survey,
        @Context HttpServletResponse servletResponse) throws IOException,
        SQLException {
    SurveyDao surveyDao = new SurveyDao();
    surveyDao.addSurvey(survey);

}

1 个答案:

答案 0 :(得分:2)

我看到的主要问题是@BeanParam的使用不正确。这应仅用于您希望将不同的@XxxParam带注释的参数组合到POJO中的情况,例如

public class Survey {
    @FormParam("id")
    public String id;
    @FormParam("title")
    public String title;
}

然后@BeanParam会有效,因为数据实际上是application/x-www-form-urlencoded。但是您的请求实际上是以JSON形式出现的,这意味着请求未转换为Survey

如果您只是删除了@BeanParam,并且注册了JSON provider,那么它应该有效。