Что не так в этом примере Spring- Ajax - PullRequest
0 голосов
/ 15 марта 2020

Я разрабатываю приложение Spring RESTful. Когда пользователь щелкает ссылку Next >>, запрос JQuery AJAX GET запускается с функцией ajaxViewCusts():

var ajaxViewCusts = function(){
                var lastRowId = document.getElementById("tblCustomerList").getAttribute('data-lastRowEncId');
                var theUrl = "${pageContext.request.contextPath}/customerRest/customersList?lastRowId="+ lastRowId +"&limit="+ $("select#limitSelect").val();    
                    /*
                      In Google Console : 
                      http://localhost:8080/ShubhOnSpring/customerRest/customersList?lastRowId=6&limit=1

                      gets fired with 
                      Status Code : 500
                   */

                $.ajax({
                    type: 'GET',
                    url: theUrl,
                    contentType: 'application/json',
                    dataType: 'application/json',
                    success: function( response ){
                        console.log('----------------> Success: ajax()');
                        console.log( response );
                    },
                    error: function( response ){
                        console.log('Error: ajax() : ---------------->');
                        console.log( response );
                    }
                });
            }

Мой контроллер Получает этот запрос на получение и также печатает сообщения на консоли STS,

@Controller
@RequestMapping("/customerRest")
public class CustomerRestController {

    @Autowired
    private ICustomerManager theCustomerManager;

    @GetMapping(
        value="/customersList", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.ALL_VALUE )
    public @ResponseBody CustomerRestResponse getCustomers( 
        @RequestParam( value = "lastRowId", defaultValue = "0" ) String lastRowId, 
        @RequestParam( value = "limit", defaultValue = "2" ) String limit ,
        HttpServletRequest req , HttpServletResponse res )
    {
        System.out.println("INFO: Returning customers List...for lastRowId : "+ lastRowId + ", Limit : " + limit + " :--- CustomerRestController::getCustomers(..)");
        CustomerRestResponse restResponse = null; // new CustomerRestResponse(); 

        // ICustomerManager theCustomerManager = new CustomerManager();
        restResponse = theCustomerManager.getCustomers( lastRowId,limit );
        System.out.println("INFO: Printing Fetched Result : \n"+ restResponse.toString() );

        return restResponse;
    }
}

В окне вывода консоли STS я получил:

// Output in console : 
----------------------
INFO: Returning customers List :: com.shubh.mvc.rest.controller.CustomerRestController::getCustomers() 
INFO: Printing Fetched Result : 
CustomerRestResponse [responseStatus=true, listCustomers=[Customer [id=7, firstName=GGG, lastName=DDD, email=EEE]]]

org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver logException
    WARNING: Resolved [org.springframework.http.converter.HttpMessageNotWritableException: No converter for [class com.shubh.mvc.rest.model.CustomerRestResponse] with preset Content-Type 'null']

Я получаю это warning, хотя у меня есть включил Jackson Core и Jackson Databind JAR-файлы в моей папке WEB-INF> lib для Java преобразования объекта в JSON объекта и наоборот:

Jackson JAR Files added in WEB-INF

Это мой класс модели ответа:

package com.shubh.mvc.rest.model;

import java.util.List;

import com.shubh.mvc.model.Customer;

public class CustomerRestResponse {

    private Boolean responseStatus;
    private List<Customer> listCustomers;

    public CustomerRestResponse() {

    }

    public Boolean getResponseStatus() {
        return responseStatus;
    }

    public void setResponseStatus(Boolean responseStatus) {
        this.responseStatus = responseStatus;
    }

    public List<Customer> getListCustomers() {
        return listCustomers;
    }

    public void setListCustomers(List<Customer> listCustomers) {
        this.listCustomers = listCustomers;
    }

    @Override
    public String toString() {
        return "CustomerRestResponse [responseStatus=" + responseStatus + ", listCustomers=" + listCustomers + "]";
    }

}

Моя конфигурация. xml файл:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:tx="https://www.springframework.org/schema/tx"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        https://www.springframework.org/schema/tx 
        https://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">



    <context:component-scan base-package="com.shubh.mvc.controllers" />


    <mvc:annotation-driven/>


    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <mvc:resources location="/resources/" mapping="/resources/**"></mvc:resources>

</beans>

Я не могу получить успешный ответ от AJAX, поскольку это в консоли STS появляется предупреждение, когда я нажимаю Next>> и запускаю AJAX Call:

Я также проверил этот , но мне это не помогло, я думаю, contentType и dataType со стороны клиента и Backend не совпадают.

Так может кто-нибудь сказать мне, как это исправить и добиться успеха? ответ (200) и данные обратно от контроллера .?

1 Ответ

0 голосов
/ 15 марта 2020

Нашел решение: На самом деле я использовал более старые version из Jackson-Core и Jackson-DataBind, то есть: 0.63.0.17, но там, где я заменил их на версию 2.x, она работала так же, как magi c. ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...