Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring MVC Ajax Upload не могу нормально получить JSON ответ от контроллера / 7 сообщений из 7, страница 1 из 1
06.02.2012, 23:20:32
    #37649444
Usik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring MVC Ajax Upload не могу нормально получить JSON ответ от контроллера
Решил написать асинхронный загрузчик файлов на сервер при помощи Spring MVC+ либа ajaxupload

Код метода со странички
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<script type="text/javascript">
    function ajaxFileUpload() {
        $.ajaxFileUpload({
                    url:"uploadFile",
                    secureuri:false,
                    dataType: 'json',
                    fileElementId:'fileData',
                    success: function (data, status) {
                        alert(data['msg']);
                    },
                    error: function (data, status, e) {
                        alert(data['msg']);
                    }
                }
            )
    }
</script>



Код контроллера

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
@Controller
@RequestMapping
public class MyController implements ServletContextAware,HandlerExceptionResolver {

    @RequestMapping(value = "/someurl",method = RequestMethod.GET)
    public String getForm(Model model,HttpServletRequest request){
        try {
            model.addAttribute("uploadModel",new UploadModel());
        } catch (Exception e) {
            e.printStackTrace();
        }
      return "/somefolder/somepage";
    }


    @RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
    public void handleFileUpload(UploadModel uploadItem,HttpServletRequest request,HttpServletResponse response){
        response.setContentType("text/html;charset=UTF-8");
        try {
            response.getWriter().print("{msg: 'success',error:''}");
            
        } catch (IOException e) {
            e.printStackTrace();  
        }
    }

    @Override
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object o, Exception exception) {
        String responseError="";
        Map<Object, Object> model = new HashMap<Object, Object>();
        if (exception instanceof MaxUploadSizeExceededException) {
            responseError="{msg: 'bigsize'}";
        } else {
            responseError="{msg: 'fail'}";
        }
        response.setContentType("text/html;charset=UTF-8");
        try {
            response.getWriter().print(responseError);
        } catch (IOException e1) {
            e1.printStackTrace();  
        }
        model.put("uploadModel", new UploadModel());
        return new ModelAndView("/somefolder/somepage", (Map) model);
    }
}



Заметил такую особенность если размер файла не превышает указанный, то все норм, на страничке в функции success я имею JSON структуру. А если размер файла превышает указанный то

Код: html
1.
2.
3.
 error: function (data, status, e) {
                        alert(data['msg']);
                    }



Показывает undefined.Если же в контроллере дописать строчку в методе resolveException дописать
response.getWriter().close();
То в функции error на HTML страничке я вижу JSON сообщение, но появляется исключение


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
javax.servlet.jsp.JspTagException:
	at org.apache.taglibs.standard.tag.common.core.ImportSupport.acquireString(ImportSupport.java:306)
	at org.apache.taglibs.standard.tag.common.core.ImportSupport.doEndTag(ImportSupport.java:171)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
	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.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
	at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:551)
	at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:488)
	at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:229)
	at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
	at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1031)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:815)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:717)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
	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.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:852)
	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)




А если эту строчку (response.getWriter().close()) дописать в функцию handleFileUpload , и размер файла будет допустимым, то исключение не появляется.

Хотелось бы понять что я не так делаю, нужно чтобы в обоих методах success и error я мог получить JSON сообщение, и чтобы исключения не было
...
Рейтинг: 0 / 0
07.02.2012, 11:18:16
    #37649815
ТимоН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring MVC Ajax Upload не могу нормально получить JSON ответ от контроллера
Usik,

Обратите внимание на аннотацию @ResponseBody
ajax-simplifications-in-spring-3-0/
...
Рейтинг: 0 / 0
07.02.2012, 17:52:33
    #37650512
jab
jab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring MVC Ajax Upload не могу нормально получить JSON ответ от контроллера
...
Рейтинг: 0 / 0
07.02.2012, 18:06:21
    #37650538
Usik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring MVC Ajax Upload не могу нормально получить JSON ответ от контроллера
Ок посмарю ссылки , а вот еще вопрос, нужно ли закрывать writer , если я его взял response.getWriter() или нет?
...
Рейтинг: 0 / 0
07.02.2012, 19:05:17
    #37650620
jab
jab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring MVC Ajax Upload не могу нормально получить JSON ответ от контроллера
А у меня такаяже проблема как тут:
http://www.javatalks.ru/sutra139804.php
Не знаю как нормально решить вопрос с чарсетом этим.
...
Рейтинг: 0 / 0
07.02.2012, 19:10:33
    #37650629
jab
jab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring MVC Ajax Upload не могу нормально получить JSON ответ от контроллера
Usik , а почему бы Вам не пользоваться готовой JSON вьюхой?
<bean name="jsonView" class="org.springframework.web.servlet.view.json.JsonView"/>
...
Рейтинг: 0 / 0
07.02.2012, 19:56:13
    #37650694
jab
jab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring MVC Ajax Upload не могу нормально получить JSON ответ от контроллера
Скачал примерчик
http://www.javabeat.net/articles/262-asynchronous-file-upload-using-ajax-jquery-progress-ba-1.html
Значит там библиотек не хватало. Скачал у апача библиотеки.

Запускается проект, закачивает файлы в нужную папку, но почемуто не отображает процесс загрузки. Сразу показывает размер файла и 100% загрузку. Потом показывает алерт(доне) и прячется после зугрузки. В общем как-то не доконца работает. Пробовал разных размеров файлы и в опере и в фаерфоксе и везде одно и тоже.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring MVC Ajax Upload не могу нормально получить JSON ответ от контроллера / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]