LINUX.ORG.RU

Как включить автоматическое преобразование plain JSON в Java POJO в Spring?

 , ,


0

1

Dependencies:

        <jackson.version>2.6.4</jackson.version>
        <jackson.mapper.version>1.9.13</jackson.mapper.version>
...
        <!-- Jackson JSON -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>${jackson.mapper.version}</version>
        </dependency>

«Слушающий» метод контроллера:

    public static class UserFromLogin {
        public String id;
        public String username;
        public String email;
        public String password;
        public String password_control;
    }

    @RequestMapping(value = {"/user"}, method = RequestMethod.POST)
    public @ResponseBody String createUser(@RequestBody UserFromLogin user) {
        
        log.debug("CREATE USER: id="+user.id+", username="+user.username+", email="+user.email+", pass="+user.password+", passCheck="+user.password_control);
        
        return "{data: 'ok'}";
    }
Но POST-запросы не приходят в этот метод.

В сервлете ничего не изменял. Может, нужно какой bean определить? Не могу нагуглить.

★★★★★

А на сериализуемых бинах ты аннотации поставил из Jackson library? Вроде это нужно. И как я понимаю они уже

implements Serializable

Ага, прочитал ещё раз. IDE нету под рукой, посмотреть не могу. Попробуй вынести поля в бин и сделать его как я написал в выше, если все останется как есть, возможна трабла с депенденси, я в мавене не силён к сожалению. Посмотри ещё куда ты ложишь проперти и откуда из потом читаешь, в каком нить rest client
Ещё ты можешь в свой контроллер непосредственно получать request object, глянь например что там есть. Может он пустой

rusich ()
Последнее исправление: rusich (всего исправлений: 2)

емнип, если у тебя неправильно замаплены классы, то в консоли (или в браузере, как там у тебя настроено) должна вылезать ошибка байндинга, типа «не могу найти энитити для этого json»

а если у тебя просто этот метод не дергается безо всяких ошибок, значит проблема не в мапинге, а в роутинге. Попробуй вычистить мусор (в виде всяких @ResponseBody и параметров метода) и заставить маршрут (метод в контроллере) просто срабатывать. И только потом уже навешивай на него фенечки.

stevejobs ★★★★☆ ()
Ответ на: комментарий от stevejobs

+1, только оно вроде по умолчанию не показывает ошибки биндинга, просто отваливпется.


Вот хороший пример:
пример

rusich ()
Последнее исправление: rusich (всего исправлений: 1)
Ответ на: комментарий от stevejobs

Я даже не пойму, на каком этапе что-то валится.

При деплое вижу:

INFO  RequestMappingHandlerMapping:515 - Mapped "{[/user],methods=[POST]}" onto public java.lang.String bla-bla.web.UserController.createUser()

Тут гуд.

Но любой запрос на /user или /user.json

Возвращает 302 Found с пустым телом. Даже когда я щас отключил все параметры из этого метода - все @RequestBody и подобное.

bvn13 ★★★★★ ()

Я затупил. У меня в SpringSecurity не был этот урл добавлен.

bvn13 ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.