我正在尝试使用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);
}
答案 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,那么它应该有效。