2015-04-01 13 views
6

Próbuję odwzorować żądanie strony, aby jednocześnie zwrócić widok obiektu i obiektu JSON. Do tego mam wykorzystaniem dostawcę Jackson JSONWidok kontrolera zwrotu sprężyny i JSON Razem

Oto moja metoda kontroler

@RequestMapping(method = RequestMethod.GET, value = "/reports") 
public String getFiles(Model model) { 
    // 
    //build array list 
    // 
    return files; 
} 

ta zwraca mój widok (WEB-INF/jsp/reports.jsp) w porządku, jednak bez obiektu JSON, że Jackson buduje, więc oczywiście muszę opisywać metoda z @ResponseBody który zapisze obiekt JSON do odpowiedzi hTTP automagicznie i zwróci files ArrayList ...

@RequestMapping(method = RequestMethod.GET, value = "/reports") 
@ResponseBody 
public ArrayList<String> getFiles(Model model) { 
    // 
    ///build array list 
    // 
    return files; 
} 

a obiekt JSON jest rzeczywiście wrócił, bu t w nowym widoku/pustym dokumencie html. Czy jest możliwe zwrócenie obiektu JSON i przekierowanie do "reports.jsp" w tym samym czasie?

+2

To nie ma sensu. Jedno żądanie == jedna odpowiedź. Możesz przechowywać JSON w jakimś atrybucie i pobrać wartość tego atrybutu na stronie JSP lub wysłać 2 żądania, jedną do renderowania strony JSP, a drugą do uzyskania JSON. –

+0

Co mam zamiar zbudować obiekt JSON w chwili, gdy trafię na stronę "reports.jsp" –

Odpowiedz

5

Podejrzewam, że w swoim pierwszym przykładzie faktycznie powracasz "reports" zamiast files. A jeśli chcesz zwrócić widok, nie możesz również zwrócić ciała odpowiedzi - możesz zwrócić tylko jedną rzecz.

Więc albo podzielisz go na dwie prośby, albo umieścisz JSON w modelu i pobierzesz go na stronie JSP, np.

Java:

ObjectMapper mapper = new ObjectMapper(); 
model.addAttribute("json", mapper.writeValueAsString(files)); 

JSP:

<script> 
    var files=${json}; 
</script> 
+0

Dzięki @Cupawn to odpowiada na moje pytanie. Muszę jeszcze zagłębić się w API ObectMapper, ale czy wiesz, czy potrafi zdefiniować domyślny "klucz" dla każdej wartości w obiekcie JSON? (tj. ["etykieta": "wartość 1", "etykieta": "wartość 2"]) –

+2

'[" etykieta ":" wartość 1 "," etykieta ":" wartość 2 "]" nie byłyby prawidłowe JSON - nie możesz mieć dwóch właściwości o tej samej nazwie. Może chcesz "[{" label "," value1 "}, {" label "," value2 "}]' ... Powinieneś zamieścić nowe pytanie z oczekiwanym wejściem i pożądanym wyjściem – CupawnTae

+0

Tak, to mam na myśli, ja wyśledzisz to. Dzięki jeszcze raz! –

2

Możesz samodzielnie utworzyć obiekt Json i dodać do modelu (widok zwrotu w tym przypadku) lub widok powrotu, a następnie po załadowaniu strony wywołać inną funkcję, która zwraca obiekt ajax.

Powiązane problemy