У меня есть контроллер Spring MVC с помощью следующего метода:Spring MVC возвращение restcontroller JSON строку
@RequestMapping(value = "/stringtest", method = RequestMethod.GET)
public String simpletest() throws Exception {
return "test";
}
Это сидит внутри контроллера, который начинается так:
@RestController
@RequestMapping(value = "/root")
public class RootController
Когда я звоню другие методы, возвращают объекты, эти объекты сериализуются Джексоном в JSON. Но этот метод, который возвращает строку, не преобразуется в JSON. В случае, если это не ясно, вот пример использования завитка:
$curl http://localhost:8080/clapi/root/stringtest
test
Таким образом, проблема в том, что «тест» без кавычек не является строка JSON, но мой REST клиент ожидает строку. Я ожидал, что завиток команду, чтобы показать эту строку в кавычки вокруг него, так что это законно JSON вместо:
"test"
Я использую Spring WebMVC 4.1.3 и 2.4.3 Джексона. Я попытался добавить атрибут «производит» в RequestMapping, чтобы сказать, что он должен возвращать JSON. В этом случае атрибут Content-Type, отправленный обратно, является «application/json», но тестовая строка не цитируется.
Я мог бы обойти это, вызвав библиотеку JSON для преобразования Java String в JSON, но, похоже, Spring MVC и Jackson обычно делают это автоматически. Но почему-то они не делают этого в моем случае. Любые идеи, что я, возможно, неправильно настроил, чтобы просто проверить тест вместо «теста»?
Вы можете попробовать обернуть свою строку в объект. В противном случае Джексону не удастся узнать, какое имя следует присвоить ключу JSON вашей строки. – Matt
@Matt только одна строка действительна JSON, она не обязательно должна быть объектом. Например, даже массив работает отлично. Если я изменил код для возврата массива, я получаю '[" test "]'. Поэтому я ожидаю, что если я верну простую строку, я должен получить '' test "' –
Это не так очевидно, посмотрите на этот ответ: http://stackoverflow.com/a/7487892/369946. Согласно RFC-определению типа «application/json», JSON должен быть объектом или массивом. – Matt