2013-05-27 2 views
0

В настоящее время я создаю webapp используя Spring MVC, где представление отображается с помощью Apache Tiles. Недавно я добавил Spring Security.Ошибка при разрешении/извлечении json-данных после обновления версии Spring

Я работал с весной версии 3.0.7.RELEASE. И все сработало хорошо. Поскольку мне нужна была лучшая безопасность, мне пришлось обновить ее до более высоких версий. Поэтому я повысил уровень безопасности до . 3.1.2.RELEASE и все остальное в той же версии.

После этого У меня проблема с извлечением данных json от моего контроллера. Часть моей страницы отображается, но другая часть, которая вызывает метод в контроллере и должна вернуть данные json назад, не отображает (она должна заполнять таблицу данными, которые она получает). Он бросает эту ошибку:

javax.servlet.ServletException: Не удалось разрешить представление с именем «Пример/getJsonData/параметра» в сервлет с именем «» appServlet

Я звоню этот метод каждые 5с из мой JSP, используя JQuery метод GET, как это:

function update() { 
     $.getJSON('./example/getJsonData/parameter', function(data) { 
     //do some things    
     }); 
    }; 

И когда я проверяю консоль, чтобы увидеть, что происходит, я вижу это:

GET http://localhost:8080/myapp/example/getJsonData/parameter - 500 (Internal Server Error) 

Вот как resloving URLs выглядеть в моем сервлетах контексте:

<beans:bean id="viewResolver" 
    class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
    <beans:property name="viewClass"> 
     <beans:value> 
      org.springframework.web.servlet.view.tiles2.TilesView 
     </beans:value> 
    </beans:property> 
</beans:bean> 
<beans:bean id="tilesConfigurer" 
    class="org.springframework.web.servlet.view.tiles2.TilesConfigurer"> 
    <beans:property name="definitions"> 
     <beans:list> 
      <beans:value>/WEB-INF/tiles/general.xml</beans:value> 
     </beans:list> 
    </beans:property> 
</beans:bean> 

А вот как метод в мой контроллер выглядит

@RequestMapping(value = "getJsonData/{parameter}", method = RequestMethod.GET) 
public @ResponseBody 
Model getJsonData(HttpSession httpSession, Model model, @PathVariable(value = "parameter") String parameter) { 
model.addAttribute("parameter", true); 
//doing something here 
    return model; 
} 

Давайте просто скажем, я попробовал, добавив производит = "приложения/JSON »и ничего не изменил. Итак, моя Q, что мне нужно изменить в конфигурационных файлах после обновления версии, чтобы продолжить использовать приложение таким же образом? Или у меня есть способ продолжать использовать мое приложение так же, как раньше? Чтобы быть ясным, все работало до обновления версий Spring.

Вот полный StackTrace для ошибки:

27.05.2013. 12:52:57 org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet appServlet threw exception 
javax.servlet.ServletException: Could not resolve view with name 'example/getJsonData/parameter' in servlet with name 'appServlet' 
    at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1190) 
    at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:992) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:939) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:920) 
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:816) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:801) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118) 
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:183) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) 
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) 
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) 
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
    at java.lang.Thread.run(Thread.java:662) 

ответ

0

Управление, чтобы решить эту проблему. Проблема заключалась в том, что я возвращаю Model, которая в основном является только Map, но у нее есть некоторые дополнительные функции, и поэтому резольверы в новых версиях весны думали, что они должны что-то сделать с этим результатом, решить ее или что-то в этом роде. Поэтому я изменил возвращаемый тип на карту и добавил

Map<String, Object> resultMap = new HashMap<String, Object>(model.asMap()); 

И затем вернул этот результат. (: Я сомневаюсь, что у кого-то будет такая же проблема, но вы никогда не знаете ^^

+0

Имейте больше веры в проблемы: D В настоящее время сталкивается с чем-то похожим, но пытаюсь вернуть json. –

+0

Хахаха, вот почему я написал: «Вы никогда не знаете ', потому что вы действительно никогда не знаете: DI надеется, что это поможет вам или, по крайней мере, даст вам некоторый намек на решение вашей проблемы. – masster

+0

На самом деле, я вырезал из коробки преобразование и пошел с моим собственным преобразованием, теперь все работает :) –

Смежные вопросы