Spring MVC AJAX и JSON, использующие Custom View Resolver и Custom View - PullRequest
1 голос
/ 26 июня 2010

пользовательское представление:

public class MyView extends AbstractView {
   .... awesome stuff ...
}

контроллер:

@RequestMapping(value="mylocation")
public ModelAndView dosomething() {
...
   modelAndView.setView( new MyView() );
   return modelAndView;
}

По какой-то причине это не работает ... Единственный распознаватель представлений, который у меня есть, это:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          p:prefix="/WEB-INF/jsp/"
          p:suffix=".jsp" >
        <property name="exposedContextBeanNames">
            <list>
                <value>spEnv</value>
            </list>
        </property>
    </bean>

этот код не работает, потому что он пытается создать некоторое представление JSP на основе ... Я не уверен, путь моего представления формы;и, очевидно, для него нет представления JSP, я ожидаю, что JSON будет возвращен на самом деле, но по какой-то причине это не работает, он просто пытается перенаправить меня к некоторому JSP, поэтому я предполагаю, что мне нужно указатькак справиться с этим в моем XML ... но я видел около 1000 различных способов, которыми люди возвращают JSON, и все они очень сбивают меня с толку, я просто ищу самый простой способ, поэтому я могу взять его изтам

edit: я добавил ответ, который является хорошим началом, но он позволяет вам набирать «.json» после любого URL, и это будет делать некоторые действительно плохие вещи, если в качестве контроллера я не ожидаю этого, поэтому мне нужно как-то применить этот преобразователь представлений только к защищенным URL-адресам

1 Ответ

1 голос
/ 26 июня 2010

Хорошо, наконец, после попытки миллиона комбинаций

@RequestMapping(value = "/test/data")
    public TestFormData dostuff() {
        TestFormData data = new TestFormData();
        data.setName("myname");
        return data;
    }

, а затем это

<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>

Я не очень понимаю, как я могу вернуть объект отсюда ...

Но на самом деле это, хотя и просто, и очень полезно, неприемлемо, потому что тогда я зашел на какую-то другую страницу моего сайта и просто поместил произвольный «.json» после URL-адреса, и он выдал исключение, которое дает пользователям ПУТЬ слишком много информации о моем приложении, поэтому в основном мне нужно найти способ использовать эту возможность только на определенных контроллерах, которые защищены ...

Есть идеи?

...