Как обрабатывать произвольные объекты JSON с пружиной MVC? - PullRequest
0 голосов
/ 09 декабря 2010

Я успешно использую spring-mvc с json для преобразования между объектами домена и объектами json.

Теперь я хочу написать контроллер, который просто принимает любой json, проверяет его и предоставляет в компактном видеСериализуемая форма для сервисного уровня.(Строка json будет достаточно, лучше любое представление компактного байтового массива).Мой текущий подход такой:

@RequestMapping(value="/{key}", method=RequestMethod.GET)
@ResponseBody
public Object getDocument(@PathVariable("username") String username,
        @PathVariable("key") String key,
        HttpServletRequest request,
        HttpServletResponse response) {
    LOGGER.info(createAccessLog(request));
    Container doc = containerService.get(username, key);
    return jacksonmapper.map(doc.getDocument(), Map.class);
}

и

@RequestMapping(value="/{key}", method=RequestMethod.PUT)
public void putDocument(@PathVariable("username") String username,
        @PathVariable("key") String key,
        @RequestBody Map<String,Object> document,
        HttpServletRequest request,
        HttpServletResponse response) {
    LOGGER.info(createAccessLog(request));
    containerService.createOrUpdate(username, key,document);
}

Обратите внимание, что этот подход не работает, потому что я не хочу Map в методе put, а метод get возвращает только{ "это": нулевая} ;.Как мне настроить мои методы?

Приветствия,

Ян

Ответы [ 2 ]

2 голосов
/ 09 декабря 2010

Spring имеет эту функцию автоматически.Вам просто нужно <mvc:annotation-driven /> и Джексон на вашем пути к классам.Затем Spring будет обрабатывать все запросы с заголовком accept, установленным на */json, и соответствующими ответами через преобразователь JSON.

0 голосов
/ 21 мая 2015

Это легко. Вам не нужна аннотация @RequestBody.

    @RequestMapping(value="/{key}", method=RequestMethod.PUT)
    public void putDocument(@PathVariable("username") String username,
            @PathVariable("key") String key, HttpServletRequest request, HttpServletResponse response) {

        try {
            String jsonString = IOUtils.toString(request.getInputStream()); 
        } catch (IOException e) {
            e.printStackTrace();
        }

        LOGGER.info(createAccessLog(request));
        containerService.createOrUpdate(username, key,document);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...