Spring MVC Ajax call Сообщение тела запроса с ошибкой 415 - PullRequest
0 голосов
/ 27 января 2019

Я делаю демо Spring MVC.Я создал ajax, отправляющий запрос на публикацию с телом данных внутри, но Spring, похоже, не может распознать мой запрос и его параметры (возвращен статус 415).Он даже не может позвонить моему контролеру.

var jsonSTr = JSON.stringify(products);
var data = {};
data["products"] = jsonSTr;

$.ajax({
    type: "POST",
    url: urlReq, --> "/mastercard/render"
    data: JSON.stringify(data),
    beforeSend: function (xhr) {
           xhr.setRequestHeader("Accept", "application/json");
           xhr.setRequestHeader("Content-Type", "application/json");
    },
   }).done(function (data, textStatus, jqXHR) {
                    console.log(textStatus);
});

А это мой код Java

@RequestMapping(value="/mastercard/render", method = RequestMethod.POST,produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public ModelAndView renderToMasterCardForm(@RequestBody CheckoutRenderRequest checkoutRenderRequest) {
    List<Product> paidProducts = this.jsonToListProduct(checkoutRenderRequest.getProducts());

    ModelAndView viewModel = new ModelAndView("mastercardform");
    Response response = new Response();
    response.status = "ok";
    response.url = "mastercardform";
    response.price = String.valueOf(paidProducts.parallelStream().collect(Collectors.summarizingDouble(Product::getPrice)).getSum());
    ;
    viewModel.addObject("result", response);
    return viewModel;
 }

CheckoutRequest класс

private static class CheckoutRenderRequest {
    private String products;

    public String getProducts() {
        return products;
    }

    public void setProducts(String products) {
        this.products = products;
    }
}

I 'Я пробовал с таким майным решением, но оно все еще не работает.На мой код ссылаются с этих сайтов https://www.javacodegeeks.com/2013/09/spring-mvc-ajax-jquery.html, Ошибка POST JSON с 415 неподдерживаемым типом носителя, Spring 3 mvc , http://www.mkyong.com/spring-mvc/spring-4-mvc-ajax-hello-world-example/, но они не помогают.Я действительно не знаю, что я делаю не так, пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 27 января 2019

Я проверяю ваш код, и он работает.

мой ajxa (такой же как ваш):

var jsonSTr = JSON.stringify({"ddd":"sss", "der":"fvgb"});
    var data = {};
    data["products"] = jsonSTr;

    $.ajax({
        type: "POST",
        url: '/mastercard/render',
    data: JSON.stringify(data),
        beforeSend: function (xhr) {
        xhr.setRequestHeader("Accept", "application/json");
        xhr.setRequestHeader("Content-Type", "application/json");
    },
    }).done(function (data, textStatus, jqXHR) {
        console.log(textStatus);
    });

мой контроллер (такой же, как ваш с небольшим изменением возвращаемого значения только для теста):

@RequestMapping(value="/mastercard/render", method = RequestMethod.POST,produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
    @ResponseBody
    public ModelAndView renderToMasterCardForm(@RequestBody CheckoutRenderRequest checkoutRenderRequest) {
        System.out.println(checkoutRenderRequest.getProducts());

        ModelAndView viewModel = new ModelAndView("mastercardform");

        viewModel.addObject("result", "Hi");
        return viewModel;
    }

Моя сущность (такая же, как вы, но измените частный статический класс на общедоступный):

public class CheckoutRenderRequest {
    private String products;

    public String getProducts() {
        return products;
    }

    public void setProducts(String products) {
        this.products = products;
    }
}

МОЙ ПОЛНЫЙ КОНТРОЛЛЕР:

@Controller
@RequestMapping(value = "/")
public class Test {

    @RequestMapping(value = "/")
    public String index() {
        return "index";
    }

    @RequestMapping(value="/mastercard/render", method = RequestMethod.POST,produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
    @ResponseBody
    public ModelAndView renderToMasterCardForm(@RequestBody CheckoutRenderRequest checkoutRenderRequest) {
        System.out.println(checkoutRenderRequest.getProducts());

        ModelAndView viewModel = new ModelAndView("mastercardform");

        viewModel.addObject("result", "Hi");
        return viewModel;
    }
}

и явызвал ваш ajax на странице index.jsp

0 голосов
/ 27 января 2019

Переменные данные не конвертируются JSON.stringify, просто используйте их.

var data = {products: JSON.stringify(xx)};
$.ajax({
    data: data,
    url: xx
 });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...