Ajax javascript Карта для контроллера Spring - PullRequest
0 голосов
/ 21 октября 2019

Я пытаюсь Ajax Javascript Map, чтобы Spring контроллер. но это становится нулевым в бэкэнде. Пожалуйста, извините, если я повторяю вопрос.

  1. Я не могу изменить тип Map, так как вся моя логика внешнего интерфейса на нем. Потому что set, get и has метод из Map - это то, что мне нужно.
var ansMap = new Map(); // This way i created object

// added many values in ansMap,

$.ajax({
        type: "POST",
        url: myUrl,
        contentType : 'application/json',
        //cache: false,
        dataType : 'json',
        data : ansMap, // can't JSON.stringy(ansMap) as it gives empty json
        success: function(result) {
            console.log(result);
        },

Spring code

@RequestMapping (value="myUrl", method=RequestMethod.POST)
    public @ResponseBody String saveData(@RequestParam(required = false, value = "mapData") Map<String,List<String>> mapData, Model map)
    {
        log.info("Call Success");
        log.info("mapData: "+mapData);

Пожалуйста, предложите, что нужнобыть сделано здесь.

Ответы [ 2 ]

1 голос
/ 21 октября 2019

Это должно работать

страница

<button id="doPost"> post </button>
    <script>
        $(function () {
            var map = new Map();
            map.set('CIQ_2','aa');
            map.set('CIQ_3','78965412300');

            console.log(map);

            $("#doPost").click (function() {
                var settings = {
                    beforeSend: function(xhr, options) {
                        xhr.setRequestHeader("content-type" ,"application/json; charset=utf-8");
                    },
                    type: 'POST',
                    url:  '/post' ,
                    data: JSON.stringify(Object.fromEntries(map))
                }

                $.ajax(settings).done(function(result) {
                    console.log("done : " + result);
                });
            });

        });

    </script>

Контроллер

    @PostMapping("/post")
    @ResponseBody
    public String post(@RequestBody Map<String,String> data) {
        System.out.println(data);
        return "data well received";
    }

напечатает {CIQ_2=aa, CIQ_3=78965412300}

рабочий код на GitHub

1 голос
/ 21 октября 2019

Вы действительно можете отправить свою Карту без изменения значения

var ansMap = new Map(); // This way i created object

// added many values in ansMap,

$.ajax({
        type: "POST",
        url: myUrl,
        contentType : 'application/json',
        //cache: false,
        dataType : 'json',
        data : JSON.stringify(Object.fromEntries(ansMap)), // can't JSON.stringy(ansMap) as it gives empty json
        success: function(result) {
            console.log(result);
        },

Это превратит ее в объект javascript.

Object.fromEntries Превратит вашу Карту в объект javascript, безизменение исходного Map

Что касается вашего бэкенда, я думаю, что вы неправильно интерпретируете аннотацию @RequestParam. @RequestParam предназначен для извлечения запроса параметров, параметров формы и даже файлов из запроса.

Я думаю, что вы ищете @RequestBody. Это значит, что вы ищете что-то похожее на:

@RequestMapping(value="/myUrl",method = RequestMethod.POST) 
    public String saveData( @RequestBody Map<String,Object> body) {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...