2015-11-30 2 views
1

У меня есть конечная точка, которая должна читать строковое значение как тело.Как автоматически разобрать String @RequestBody как json

@RestController 
public class EndpointsController { 
    @RequestMapping(method = RequestMethod.PUT, value = "api/{myId}/name", consumes= MediaType.APPLICATION_JSON) 
    public String updateName(@PathVariable(MY_ID) String myId, @RequestBody String name) { 

    //will be: "new name" 
    //instead of : newname 
    return myId; 
    } 
} 

Моя проблема в том, что клиент будет назвать это с «новым именем», который правильно ИМХО, но сервер читает это с цитаты, потому что он не обрабатывает строку как объект JSON. Как я могу сказать, что Джексон тоже разбирает строку (так же, как с Pojos)?

+0

Ваш '@ PathVariable' не соответствует тому, что у вас есть в URL, кстати. – Makoto

+1

как вы узнали? его константа;) – riddy

+0

, пожалуйста, добавьте пример запроса json. – reos

ответ

8

Если вы используете Джексон в качестве своего парсера JSON, вы можете просто объявить свой параметр с типом TextNode. Это тип Джексона, представляющий строки JSON.

public String updateName(@PathVariable(MY_ID) String myId, @RequestBody TextNode name) { 

Вы можете использовать его метод asText получить его текстовое значение.

+0

вот и все, спасибо! Я надеялся на простое решение без изменения api – riddy

+0

Наш API теперь сломан. Не имеет смысла модифицировать все службы, как было предложено. Я буду искать глобальное решение для настройки и сообщать вам об этом. – baraka

+2

@baraka Просьба пояснить, как ваш комментарий относится к этому ответу. Какой API? Как это сломалось? Какие услуги? Когда/где я предлагаю изменить их все? Какая глобальная конфигурация? Я действительно не понимаю ваш комментарий. –

Смежные вопросы