POST-запрос не отображается на Spring MVC Controller - PullRequest
0 голосов
/ 21 февраля 2019

Я отправляю запрос POST от службы Angularjs $ http.Он работает нормально, когда мое обещание, как показано ниже, и правильно отображается на Spring Controller,

service.js

reassignKsaPendingLeads : function(data,username)
                                    {
    var promise = $http({
        url : "reassignPendingLeads.htm",
        method : "POST",
        data : mydata
        })
        .success(function(data, status, header, config, statusText)
        {
        }       
}

Spring Controller

@RequestMapping({ "reassignPendingLeads.htm" })
    public @ResponseBody String updateAccessStatus(@RequestBody List<KsaLead> ksaLeads) 
    {
        log.info("Inside updateAccessStatus");
        return "true";
    }        

Объект json, который я передаю из service.js, правильно отображается в @RequestBody List ksaLeads.
Поскольку объект json содержит те же ключи, что и свойства бина KsaLead.

Но теперь я хочу передать другой параметр имя пользователя помимо тела json (data).
Затем я получаю метод запроса 'POST', не поддерживаемый в Spring Controller.

new service.js

reassignKsaPendingLeads : function(data,username)
                                    {
                                        var mydata = JSON.stringify(data) + '&username=' + username;    
                                        var promise = $http({
                                            url : "reassignPendingLeads.htm",
                                            method : "POST",
                                            data : mydata
                                        })
                                        .success(function(data, status, header, config, statusText)
                                        {
                                        }

new Spring Controller

@RequestMapping({ "reassignPendingLeads.htm" })
    public @ResponseBody String updateAccessStatus(@RequestBody List<KsaLead> ksaLeads,@RequestParam String username) 
    {
        log.info("Inside updateAccessStatus");
        return "true";
    }

Может кто-нибудь подсказать мне, какДолжен ли я передавать данные из angularJs, чтобы они правильно отображались в Spring Controller

1 Ответ

0 голосов
/ 21 февраля 2019

Я бы предположил, что вы хотите передать имя пользователя в качестве параметра запроса.Для этого $http может иметь поле ввода params:

function(data,username) {
    var promise = $http({
        url: "reassignPendingLeads.html",
        method: "POST",
        data: data,
        params: { username: username }
    })
// continue with your promise here
}

Если вы хотите передать его внутрь тела запроса, мы должны выполнить следующие шаги:

Мы должны добавить username к объекту mydata.

// we assume that data is not a primitive type
function(data,username) {
    var mydata;
    // check if data is defined
    if (data) {
        // make a deep copy first, since we don't want to modify the input
        mydata = angular.copy(data);
    } else {
        // if the data is undefined, create e new object
        mydata = {};
    }
    // add the username to mydata
    mydata.username = username;
    var promise = $http({
        url: "reassignPendingLeads.html",
        method: "POST",
        data: mydata
    })
// continue with your promise here
}

На серверной части мы должны убедиться, что мы можем принять этот тип данных.Для этого рекомендуется создать класс данных, который содержит имя пользователя и любые другие поля, которые могут появиться в вашем data объекте из внешнего интерфейса.Вероятно, что-то вроде этого:

public class MyDataClass {
    private String username;
    // other fields

    // no args constructor
    public MyDataClass() {}

    // all args constructor
    public MyDataClass(String username) {
        this.username = username;
    }

   // getter and setters 
}

Теперь мы изменим контроллер, чтобы принять его:

@RequestMapping(value = "reassignPendingLeads.htm", method = RequestMethod.POST)
    public @ResponseBody String updateAccessStatus(@RequestBody MyDataClass data) 
    {
        log.info(data.getUsername());
        return "true";
    }  
...