Mam kontroler wiosny MVC z następującą metodą:wiosna MVC powrót restcontroller json ciąg
@RequestMapping(value = "/stringtest", method = RequestMethod.GET)
public String simpletest() throws Exception {
return "test";
}
To siedzi wewnątrz kontrolera, który rozpoczyna się tak:
@RestController
@RequestMapping(value = "/root")
public class RootController
Kiedy dzwonić do innych metod, które zwracaj obiekty, te obiekty są serializowane przez Jacksona do JSON. Ale ta metoda, która zwraca ciąg, nie jest konwertowana na JSON. W przypadku, gdy nie jest jasne, oto przykład za pomocą curl:
$curl http://localhost:8080/clapi/root/stringtest
test
Tak więc problem jest to, że „test” bez cudzysłowów nie jest ciągiem JSON, ale mój klient REST spodziewa się łańcuch. Spodziewałem polecenia curl, aby pokazać, że ciąg z cudzysłowy wokół niego, dlatego zamiast JSON prawny:
"test"
Używam Wiosna WebMVC 4.1.3 oraz 2.4.3 Jacksona. Próbowałem dodać atrybut "produkuje" do RequestMapping, aby powiedzieć, że powinien zwrócić JSON. W takim przypadku atrybut Content-Type odesłany to "application/json", ale nadal ciąg testowy nie jest cytowany.
Mogę obejść to, dzwoniąc do biblioteki JSON, aby przekonwertować przez Java String do JSON, ale wygląda na to, że Spring MVC i Jackson zazwyczaj robią to automatycznie. Jednak jakoś nie robią tego w moim przypadku. Jakieś pomysły, które źle skonfigurowałem, aby otrzymać test zamiast "testu"?
Możesz spróbować owinąć swój ciąg w obiekt. W przeciwnym razie Jackson nie będzie wiedział, jaką nazwę nadać kluczowi JSON w twoim Łańcuchu. – Matt
@Matt sam łańcuch jest prawidłowy JSON, nie musi być obiektem. Na przykład nawet tablica działa poprawnie. Jeśli zmienię kod, aby zwrócić tablicę, otrzymam '[" test "]'. Tak więc spodziewam się, że jeśli zwrócę prosty ciąg, powinienem dostać '" test "' –
To nie jest takie oczywiste, spójrz na tę odpowiedź: http://stackoverflow.com/a/7487892/369946. Zgodnie z definicją RFC typu "application/json", JSON powinien być obiektem lub tablicą. – Matt