簡體   English   中英

通過Ajax調用提交JSON數據在Spring Controller中不起作用

[英]submitting json data through ajax call not working in spring controller

我有一個angularjs頁面,我試圖從該頁面通過ajax調用將輸入作為JSON對象傳遞給spring控制器,並嘗試將其分配給用戶定義的類以進行保存。 但是所有值在用戶對象中都為null 下面是我的代碼。

控制器方法代碼(POST請求):

@RequestMapping(method = RequestMethod.POST, value ={"/addEvent"})
    @ResponseBody
    public void addEvent(@RequestBody final EventsMstr eventsMstr) {
        System.out.println("@@@@@@@@@@@@@@@@@@@@@   addEvent controller started.");
        System.out.println("eventsMstr = " + eventsMstr);//Prints null for all the fields
        this.eventsMstrService.addEvent(new EventsMstr());
    }

Ajax呼叫:

SaveEvent: function (param) {
                 var successCallback = null;
                 var errorCallback = null;
                 alert("Param "+param.EventTypeId + param.StartDate+param.EndDate+param.Description);//values getting printed
                 $http({
                     url: config.InsertEvent,
                     type: "POST",
                     data: JSON.stringify(param),
                     headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }
                 })
                .success(function (data, httpStatus, headers) {
                    successCallback(data, httpStatus, headers);
                })
                .error(function (httpStatus, headers) {
                    successCallback(data, httpStatus, headers);
                });
                 return {
                     success: function (callback) {
                         successCallback = callback;
                         return {
                             error: function (callback) {
                                 errorCallback = callback;
                             }
                         }
                     }
                 }
             },

我已經用@JsonProperty注釋了我班上的所有領域。 我不確定我是否在這里缺少任何東西。 建議非常感謝。

Spring servlet配置:

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
    <bean
        class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="messageConverters">
            <list>
                <ref bean="jsonConverter" />
            </list>
        </property>
    </bean>
<bean id="jsonConverter"
        class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
        <property name="supportedMediaTypes">
        <list>
         <value>application/json</value>
         <value>application/x-www-form-urlencoded; charset=UTF-8</value>
        </list>
        </property>
    </bean>

JSON數據:

var EventItem = {
            EventTypeId: $scope.eventTypeId,
            StartDate: $scope.startDate,
            EndDate: $scope.EndDate,
            Description: $scope.EventName
        };

Bean類:

package com.ems.business.model;

import java.util.Date;

import javax.xml.bind.annotation.XmlRootElement;

//import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.codehaus.jackson.annotate.JsonProperty;


@XmlRootElement(name = "EventsMaster")
//@JsonIgnoreProperties(ignoreUnknown = true)
public class EventsMstr implements java.io.Serializable  {

    private static final long serialVersionUID = 1L;

    private Long id;
    private Long eventTypeId;
    private Date startDate;
    private Date endDate;
    private String description;

    public EventsMstr() {
    }
        public EventsMstr(Long id, Long eventTypeId, Date startDate, Date endDate,
            String description) {

        this.id = id;
        this.eventTypeId = eventTypeId;
        this.startDate = startDate;
        this.endDate = endDate;
        this.description = description;
    }

    @JsonProperty("ID")
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @JsonProperty("EventTypeId")
    public Long getEventTypeId() {
        return eventTypeId;
    }

    public void setEventTypeId(Long eventTypeId) {
        this.eventTypeId = eventTypeId;
    }

    @JsonProperty("StartDate")
    public Date getStartDate() {
        return startDate;
    }

    public void setStartDate(Date startDate) {
        this.startDate = startDate;
    }

    @JsonProperty("EndDate")
    public Date getEndDate() {
        return endDate;
    }

    public void setEndDate(Date endDate) {
        this.endDate = endDate;
    }

    @JsonProperty("Description")
    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    @Override
    public String toString() {
        return "EventsMstr [id=" + id + ", startDate=" + startDate
                + ", endDate=" + endDate + ", description=" + description
                + "]";
    }
}

正是我的粗心使我吃了兩天。 我做錯的是,我沒有注釋屬性,而是注釋了getter方法。 下面是修改后的對象類。

package com.ems.business.model;

import java.util.Date;

import javax.xml.bind.annotation.XmlRootElement;

//import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.codehaus.jackson.annotate.JsonProperty;


@XmlRootElement(name = "EventsMaster")
//@JsonIgnoreProperties(ignoreUnknown = true)
public class EventsMstr implements java.io.Serializable  {

    private static final long serialVersionUID = 1L;

    @JsonProperty("ID")
    private Long id;
    @JsonProperty("EventTypeId")
    private Long eventTypeId;
    @JsonProperty("StartDate")
    private Date startDate;
    @JsonProperty("EndDate")
    private Date endDate;
    @JsonProperty("Description")
    private String description;

    public EventsMstr() {
    }
        public EventsMstr(Long id, Long eventTypeId, Date startDate, Date endDate,
            String description) {

        this.id = id;
        this.eventTypeId = eventTypeId;
        this.startDate = startDate;
        this.endDate = endDate;
        this.description = description;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Long getEventTypeId() {
        return eventTypeId;
    }

    public void setEventTypeId(Long eventTypeId) {
        this.eventTypeId = eventTypeId;
    }

    public Date getStartDate() {
        return startDate;
    }

    public void setStartDate(Date startDate) {
        this.startDate = startDate;
    }

    public Date getEndDate() {
        return endDate;
    }

    public void setEndDate(Date endDate) {
        this.endDate = endDate;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    @Override
    public String toString() {
        return "EventsMstr [id=" + id + ", startDate=" + startDate
                + ", endDate=" + endDate + ", description=" + description
                + "]";
    }
}

請求映射也應如下所示:

@RequestMapping(method = RequestMethod.POST, value ={"/addEvent"}, 
            headers = {"content-type=application/x-www-form-urlencoded; charset=UTF-8"})
    public @ResponseBody EventsMstr addEvent(@RequestBody EventsMstr eventsMstr) {
        this.eventsMstrService.addEvent(eventsMstr);
        return eventsMstr;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM