Когда я возвращаю данные JSON в интерфейс, он показывает пустой список - PullRequest
0 голосов
/ 11 декабря 2018

Я получаю список адресов из базы данных, который я хочу отобразить во внешней части как список автозаполнения.Когда я набираю букву в поле поиска, она показывает пустое поле.в то время как я могу печатать данные JSON на консоли.Было бы очень хорошо, если бы получить фрагмент кода.

Вот мой контроллер

package com.searching.controller;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.google.gson.Gson;
import com.searching.model.Address;
import com.searching.service.SearchService;

@Controller
public class SearchingController {

    @Autowired SearchService searchService;

    @RequestMapping(value="/",method=RequestMethod.GET)
    public String searchPage() {
        //runthismethod();
        return "testpage";
    }


    @GetMapping("/addressAutocomplete")
    @ResponseBody
    public String getSearchdata(@RequestParam(value="term",defaultValue="",required=false) String term) {
        List<Address> address=searchService.fetchAddress();
        Gson json=new Gson();

        String response=json.toJson(address);

        System.out.println(response);
        return response;
    }
}

интерфейс

<!doctype html>
<html lang = "en">
   <head>
      <meta charset = "utf-8">
      <title>jQuery UI Autocomplete functionality</title>
      <link href = "https://code.jquery.com/ui/1.10.4/themes/ui-lightness/jquery-ui.css"
         rel = "stylesheet">
      <script src = "https://code.jquery.com/jquery-1.10.2.js"></script>
      <script src = "https://code.jquery.com/ui/1.10.4/jquery-ui.js"></script>

      <!-- Javascript -->
      <script>
         $(function() {
            $( "#automplete-1" ).autocomplete({
                source: "/addressAutocomplete",
                 autoFocus:true,
                minLength: 2,
            });
         });
      </script>
   </head>

   <body>
      <!-- HTML --> 
      <div class = "ui-widget">
         <p>Type "a" or "s"</p>
         <label for = "automplete-1">Tags: </label>
         <input id = "automplete-1">
      </div>
   </body>
</html>

Данные JSON на консоли

enter image description here

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Вы используете аннотацию @Controller, поэтому вы должны отправить ответ в качестве ответа. Entity в типе возврата ИЛИ просто измените аннотацию @Controller на @RestController

        @GetMapping("/addressAutocomplete")
        public ResponseEntity<List<Address>> getSearchdata (@RequestParam(value = "term", defaultValue = "", required = false) String term){
            List<Address> address = searchService.fetchAddress();
            Gson json = new Gson();

            String response = json.toJson(address);

            System.out.println(response);

            return new ResponseEntity<List<Address>>(address, HttpStatus.OK);
        }

. После запуска кода он дает правильный ответ..

enter image description here

0 голосов
/ 11 декабря 2018

Просто сделайте одно изменение в вашем контроллере следующим образом:

    @GetMapping("/addressAutocomplete")
    @ResponseBody
    public List<Address> getSearchdata(@RequestParam(value="term",defaultValue="",required=false) String term) {
        return searchService.fetchAddress();
    }

Spring преобразует возвращаемые данные в JSON.

...