2016-09-01 5 views
0

Я хочу вернуть список объектов из контроллера Spring в запрос AJAX.Верните список объектов из контроллера Spring в запрос AJAX

AJAX запрос:

function doAjaxPost(date) { 
    $.ajax({ 
     type : "POST", 
     contentType : "application/json", 
     url : "<%="/water-consumer" + homepageURL + "/hourConsumption"%>", 
     data : date, 
     dataType : 'json', 
     success : function(response) { 
      if(response != null) 
       showHourConsumption(response); 
     } 
    }); 
} 

Спринг контроллер:

@RequestMapping(value = "/{username}/hourConsumption", method=RequestMethod.POST, produces="application/json") 
public @ResponseBody List<HourConsumption> getHoursConsumptions(@RequestBody String day, HttpSession session, Model model) { 
    // do something .... 
    Household household = (Household)session.getAttribute("household"); 
    List<HourConsumption> consumptions = this.mrs.getHoursConsumption(household.getSmart_meter().getOid(), day); 
    // do something 

    if(consumptions == null) //check if what get back from something is not null 
     return null; 
    else 
     return consumptions; 
} 

Теперь запрос AJAX идет правильно, поэтому я получаю запрос от контроллера и формирует правильный (List), но когда он возвращает список, браузер возвращает мне следующие ошибка:

Не удалось загрузить ресурс: сервер ответил со статусом 406 (не допускается)

Кто-то может сказать мне, как я могу сделать это вещи или правильный способ сделать так? Большое спасибо!

ответ

0

Несколько указателей:

  1. Метод HTTP может быть GET изо столбу.
  2. Удалить параметры сеанса и модели. Если вам нужна сессия, вы можете получить ее с помощью Autowired HttpServletRequest.
  3. Убедитесь, что Джексон, как зависимость
0

Убедитесь, что после 2-й баночки присутствует в классе пути.

Если какой-либо из этих или тех и других отсутствует, то эта ошибка наступит.

ДЖЕКСОН-ядро и ДЖЕКСОН-картограф

+0

Что правильно добавить в файл pom.xml, чтобы иметь эти две банки в конфигурации Maven? –

+0

org.codehaus.jackson ДЖЕКСОНА-картографа-н.у.м. 1,9 ,13 ranjeet8082

+0

com.fasterxml.jackson.core ДЖЕКСОНА-жильный 2.8.0 ranjeet8082

0

Проблемы с данными вы возвращающиеся, чтобы браузер не очень хорошо формируются JSON. Затем я удаляю атрибут «производит» из вашего контроллера и оставляю трансформатор Spring Jackson для создания объектов json.

Измените код следующим образом:

@RequestMapping(value = "/{username}/hourConsumption", method=RequestMethod.POST) 
public @ResponseBody List<HourConsumption> getHoursConsumptions(@RequestBody String day, HttpSession session, Model model) { 
    // do something .... 
    Household household = (Household)session.getAttribute("household"); 
    List<HourConsumption> consumptions = this.mrs.getHoursConsumption(household.getSmart_meter().getOid(), day); 
    // do something 

    if(consumptions == null) //check if what get back from something is not null 
     return null; 
    else 
     return consumptions; 
} 
0

Попробуйте использовать gson Google (https://mvnrepository.com/artifact/com.google.code.gson/gson) для отправки в формате JSON строки на страницу.

Spring Controller

@RequestMapping(value = "/{username}/hourConsumption", method=RequestMethod.POST) 
public @ResponseBody String getHoursConsumptions(@RequestBody String day, HttpSession session, Model model) { 
    String jsonFormatData = ""; 
    // do something .... 
    Household household = (Household)session.getAttribute("household"); 
    List<HourConsumption> consumptions = this.mrs.getHoursConsumption(household.getSmart_meter().getOid(), day); 
    // do something 


    // **Using Gson** 
    // You can include this in your bean definition and autowire it 
    // and use the singleton created by Spring. 
    // For this example I am instantiating Gson myself 
    Gson gson = new Gson(); 

    jsonFormatData = gson.toJson(consumptions); 

    return jsonFormatData; 
} 
Смежные вопросы