Skip to content

Commit 773addb

Browse files
committed
Merge remote-tracking branch 'origin/develop'
2 parents 007b3d0 + ad8a3cc commit 773addb

File tree

6 files changed

+717
-313
lines changed

6 files changed

+717
-313
lines changed

pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
<mockito.version>1.10.19</mockito.version>
3737
<itextpdf.version>5.5.9</itextpdf.version>
3838
<jsoup.version>1.9.2</jsoup.version>
39+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
3940
</properties>
4041

4142
<dependencies>

src/main/java/cn/com/ttblog/ssmbootstrap_table/controller/JsonpController.java

Lines changed: 33 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,27 @@
11
package cn.com.ttblog.ssmbootstrap_table.controller;
22

3-
import java.io.IOException;
4-
import java.util.Arrays;
5-
import java.util.Map;
6-
import java.util.concurrent.Callable;
7-
import java.util.concurrent.TimeUnit;
8-
import javax.annotation.Resource;
9-
import javax.servlet.http.HttpServletRequest;
10-
import javax.servlet.http.HttpServletResponse;
11-
import javax.servlet.http.HttpSession;
12-
13-
import org.apache.commons.io.IOUtils;
3+
import cn.com.ttblog.ssmbootstrap_table.model.User;
4+
import cn.com.ttblog.ssmbootstrap_table.service.IUserService;
5+
import com.alibaba.fastjson.JSON;
6+
import com.alibaba.fastjson.JSONObject;
7+
import com.google.common.collect.Maps;
148
import org.apache.commons.lang3.builder.ToStringBuilder;
159
import org.slf4j.Logger;
1610
import org.slf4j.LoggerFactory;
1711
import org.springframework.stereotype.Controller;
1812
import org.springframework.ui.Model;
19-
import org.springframework.web.bind.annotation.ModelAttribute;
20-
import org.springframework.web.bind.annotation.PathVariable;
21-
import org.springframework.web.bind.annotation.RequestBody;
22-
import org.springframework.web.bind.annotation.RequestMapping;
23-
import org.springframework.web.bind.annotation.RequestMethod;
24-
import org.springframework.web.bind.annotation.RequestParam;
25-
import org.springframework.web.bind.annotation.ResponseBody;
26-
import org.springframework.web.bind.annotation.SessionAttributes;
13+
import org.springframework.web.bind.annotation.*;
2714
import org.springframework.web.context.request.async.DeferredResult;
2815

29-
import com.alibaba.fastjson.JSON;
30-
import com.alibaba.fastjson.JSONObject;
31-
32-
import cn.com.ttblog.ssmbootstrap_table.model.User;
33-
import cn.com.ttblog.ssmbootstrap_table.service.IUserService;
16+
import javax.annotation.Resource;
17+
import javax.servlet.http.HttpServletRequest;
18+
import javax.servlet.http.HttpServletResponse;
19+
import javax.servlet.http.HttpSession;
20+
import java.io.IOException;
21+
import java.util.Arrays;
22+
import java.util.Map;
23+
import java.util.concurrent.Callable;
24+
import java.util.concurrent.TimeUnit;
3425

3526
/**
3627
* jsonp测试
@@ -73,6 +64,7 @@ public void testModelAttr(HttpSession session, Model model) {
7364
* 通过一个TaskExecutor,Spring
7465
* MVC可以在另外的线程中调用Callable。当Callable返回时,请求再携带Callable返回的值
7566
* ,再次被分配到Servlet容器中恢复处理流程
67+
* <mvc:async-support default-timeout="5000"></mvc:async-support> spring mvc中配置默认的超时时间
7668
* @param str
7769
* @return
7870
*/
@@ -91,19 +83,21 @@ public String call() throws Exception {
9183

9284
@RequestMapping(value = "/asyncd", method = RequestMethod.GET)
9385
@ResponseBody
94-
public DeferredResult<String> asyncd(final String str) {
95-
DeferredResult<String> dr = new DeferredResult<String>();
96-
dr.onCompletion(new Runnable() {
86+
public DeferredResult<String> asyncd(final String str,@RequestParam(value = "sleep",required = false,defaultValue = "3")final Integer sleep) {
87+
final DeferredResult<String> dr = new DeferredResult<String>();
88+
new Thread(new Runnable() {
9789
@Override
9890
public void run() {
91+
logger.info("asyncd task start");
9992
try {
100-
TimeUnit.SECONDS.sleep(3);
93+
TimeUnit.SECONDS.sleep(sleep);
10194
} catch (InterruptedException e) {
10295
e.printStackTrace();
10396
}
104-
logger.debug("run with:{}",str);
97+
logger.info("asyncd task end");
98+
dr.setResult("hello:"+str);
10599
}
106-
});
100+
},"deffered-execute-thread").start();
107101
return dr;
108102
}
109103

@@ -282,4 +276,13 @@ Map receivejsonobj(@RequestBody Map user,HttpServletRequest request) {
282276
logger.debug("name:{}", name);
283277
return session.getAttribute("name").toString();
284278
}
279+
280+
@ExceptionHandler
281+
@ResponseBody
282+
public Map handleAllException(Exception ex) {
283+
Map result= Maps.newHashMap();
284+
result.put("success",false);
285+
result.put("msg",ex.getMessage());
286+
return result;
287+
}
285288
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package cn.com.ttblog.ssmbootstrap_table.interceptor;
2+
3+
import org.slf4j.Logger;
4+
import org.slf4j.LoggerFactory;
5+
import org.springframework.web.context.request.NativeWebRequest;
6+
import org.springframework.web.context.request.async.DeferredResult;
7+
import org.springframework.web.context.request.async.DeferredResultProcessingInterceptor;
8+
9+
public class DefferedAsyncInterceptor implements DeferredResultProcessingInterceptor {
10+
11+
private static final Logger LOGGER=LoggerFactory.getLogger(DefferedAsyncInterceptor.class);
12+
13+
@Override
14+
public <T> void beforeConcurrentHandling(NativeWebRequest nativeWebRequest, DeferredResult<T> deferredResult) throws Exception {
15+
LOGGER.info("before deffered request :{},deferredResult:{}",nativeWebRequest,deferredResult);
16+
}
17+
18+
@Override
19+
public <T> void preProcess(NativeWebRequest nativeWebRequest, DeferredResult<T> deferredResult) throws Exception {
20+
LOGGER.info("preProcess deffered request :{},deferredResult:{}",nativeWebRequest,deferredResult);
21+
}
22+
23+
@Override
24+
public <T> void postProcess(NativeWebRequest nativeWebRequest, DeferredResult<T> deferredResult, Object o) throws Exception {
25+
LOGGER.info("postProcess deffered request :{},deferredResult:{}",nativeWebRequest,deferredResult);
26+
}
27+
28+
@Override
29+
public <T> boolean handleTimeout(NativeWebRequest nativeWebRequest, DeferredResult<T> deferredResult) throws Exception {
30+
LOGGER.info("handleTimeout deffered request :{},deferredResult:{}",nativeWebRequest,deferredResult);
31+
return true;
32+
}
33+
34+
@Override
35+
public <T> void afterCompletion(NativeWebRequest nativeWebRequest, DeferredResult<T> deferredResult) throws Exception {
36+
LOGGER.info("after deffered request :{},deferredResult:{}",nativeWebRequest,deferredResult);
37+
}
38+
}

src/main/resources/spring/spring-mvc.xml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,19 @@
2929
<property name="charset" value="UTF-8" />
3030
<!-- Default dateFormat -->
3131
<property name="dateFormat" value="yyyy-MM-dd HH:mm:ss" />
32+
<!--fastjson空值处理:https://github.com/alibaba/fastjson/wiki/WriteNull_cn-->
33+
<property name="serializerFeatures">
34+
<list>
35+
<value>BrowserCompatible</value>
36+
<value>WriteMapNullValue</value>
37+
<value>WriteNullListAsEmpty</value>
38+
<value>WriteNullStringAsEmpty</value>
39+
<value>WriteNullNumberAsZero</value>
40+
<value>WriteNullBooleanAsFalse</value>
41+
<value>WriteNonStringKeyAsString</value>
42+
<value>WriteNonStringValueAsString</value>
43+
</list>
44+
</property>
3245
</bean>
3346
<!-- fastjsonView -->
3447
<bean id="fastJsonJsonView" class="com.alibaba.fastjson.support.spring.FastJsonJsonView">
@@ -109,6 +122,9 @@
109122
<mvc:callable-interceptors>
110123
<bean class="cn.com.ttblog.ssmbootstrap_table.interceptor.AsyncInterceptor"></bean>
111124
</mvc:callable-interceptors>
125+
<mvc:deferred-result-interceptors>
126+
<bean class="cn.com.ttblog.ssmbootstrap_table.interceptor.DefferedAsyncInterceptor"></bean>
127+
</mvc:deferred-result-interceptors>
112128
</mvc:async-support>
113129
</mvc:annotation-driven>
114130

0 commit comments

Comments
 (0)