Spring MVC AJAX и JSON, используя пользовательский View Resolver и пользовательский вид

StackOverflow https://stackoverflow.com/questions/3121252

Вопрос

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

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

Контроллер:

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

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

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

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

Это было полезно?

Решение

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

@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, и он бросил исключение, что дает пользователям слишком много информации О моем приложении, поэтому в основном мне нужно понять способ только иметь эту способность на определенных контроллерах, которые защищены ...

Есть идеи?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top