Как демонтировать JSON-объект в Java-класс? - PullRequest
2 голосов
/ 20 сентября 2011

У меня есть Spring REST-приложение, которое может маршалировать объект в JSON при получении запроса GET.Однако, что я должен сделать для методов POST.Я отправляю объект JSON, но он не может разобрать его в объект Java.Вот метод моего контроллера:

@RequestMapping(value = "/user", method = RequestMethod.POST)
public void createUser(HttpServletResponse response, @RequestBody User user) { 
   ...
    response.setStatus(HttpServletResponse.SC_OK);
}

Я отправляю свой JSON вот так:

        var userName = $('#userName').val();
        var password = $('#password').val();
        var mail = $('#mail').val();
        var admin = $("#admin").is(':checked');
        var user = {userName: userName, password: password, mail: mail, admin:admin};
        $.ajax({
            async : false,
            type: 'POST',
            contentType: 'application/json',
            url: '/sfd/user',
            data: user,
            dataType: 'json',
            success: function(data) {
               ...
            },
            error: function(data) {
                ...
            }
        });

PS: Здесь: http://blog.springsource.com/2010/01/25/ajax-simplifications-in-spring-3-0/ этоговорит:

Если есть ошибки проверки, возвращается HTTP 400 с сообщениями об ошибках, в противном случае возвращается HTTP 200.

У меня 400 Ошибка ошибочного запроса.Может быть, проблема связана с этим?

PS2: Должен ли я отправлять объект User после установки всех его элементов?Я имею в виду, что у объекта User есть некоторые другие атрибуты, то есть адрес, но я не устанавливаю и не отправляю его от клиента.

PS3: Когда я отлаживаю методрещение абстрактного разрешения AbstractHandlerExceptionResolver, я вижу эту ошибку.Он говорит, что 'u' - это неопределенный символ (я проверял, что 'u' - это первый ключ первого символа JSON => userName).

Ответы [ 2 ]

2 голосов
/ 20 сентября 2011

У вас должна быть следующая настройка в вашем XML:

<context:annotation-config/> 

, а затем, чтобы убедиться, что Джексон Джар находится в вашем classpath:

в моих проектах я предпочитаю установить его какSpring Bean:

десериализует ваши данные json в объект.

Подробнее об этом вы можете прочитать здесь:

http://blog.springsource.com/2010/01/25/ajax-simplifications-in-spring-3-0/

0 голосов
/ 21 сентября 2011

В @RequestMapping установите заголовки для принятия application / json, а затем попробуйте настроить это в контексте вашего приложения

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver" p:order="1">
<property name="mediaTypes">
    <map>
        <entry key="json" value="application/json" />
    </map>
</property>

<property name="defaultViews">
    <list>
        <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
    </list>
</property>
</bean>
...