分类: Java

SpringMVC HandlerExceptionResolver返回json数据

发表于11个月前(May 26, 2017 9:21:00 PM)  阅读 799  评论 0

分类: Java

标签: HandlerExceptionResolver springmvc resolveException json MappingJackson2JsonView

HandlerExceptionResolver是SpringMVC提供的全局异常处理接口。

public interface HandlerExceptionResolver {

	/**
	 * Try to resolve the given exception that got thrown during handler execution,
	 * returning a {@link ModelAndView} that represents a specific error page if appropriate.
	 * <p>The returned {@code ModelAndView} may be {@linkplain ModelAndView#isEmpty() empty}
	 * to indicate that the exception has been resolved successfully but that no view
......

Mybatis中sqlSessionFactory mapperLocations属性配置

发表于11个月前(May 12, 2017 8:06:33 PM)  阅读 1471  评论 0

分类: Java mybatis

标签: mybatis sqlSessionFactory mapperLocations classpath

用过mybatis的人都知道sqlSessionFactory中mapperLocations是用来配置mapper xml文件目录的,通常我们会这么配置classpath*:/com/cangzhitao/**/*Mapper.xml,这表示从classpath com/cangzhitao目录及其子目录下所有以Mapper.xml结尾的文件。cangzhitao后面的**就是表示任意多级目录,而classpath后面的*是什么意思呢?

笔者网上查找资料,发现很多文章都说classpath后面的*表示启用通配符,笔者实际测试,并非如此。笔者开始并没有加*,后面的通配符依然能起作用,并不像网上说的报错,不过也可能是因为版本不同的原因造成的,这里笔者的mybatis版本是3.4.4。笔者的项目是分了多个工程,mapper.xml文件分布在几个工程中,笔者在没有加*的时候,测试发现mybatis只能找到一个工程中的mapper.xml文件,而加上*,所有工程下面的mapper.xml文件就都能找到了,所以如果你也存在笔者这种情况,那么请你在classpath后面加

......

Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

发表于1年前(Apr 5, 2017 9:53:00 AM)  阅读 5567  评论 3

分类: Java 异常

标签: RFC 7230 RFC 3986

java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
	at org.apache.coyote.http11.InternalInputBuffer.parseRequestLine(InternalInputBuffer.java:189)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1000)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
	at org.apache.tomcat.util.n
......

前台枚举类型向后台传参如何转换

发表于1年前(Mar 17, 2017 8:36:16 PM)  阅读 522  评论 0

分类: Java

标签: 枚举 传参

上面这个java类是笔者常用的一种枚举类型实现的方式。如果后台有个实体属性值是上面的枚举类型,我们怎么让Spring自动进行枚举值的转换呢。

这里,我们需要用到Spring提供的Converter接口:

当我们将上面的java类注册为Spring组件后,Spring碰到StringShowType类型的属性,将自动调用上面的convert方法去尝试转换。

如何给图片生成水印和缩略图

发表于1年前(Mar 9, 2017 4:53:38 PM)  阅读 401  评论 0

分类: Java

标签: thumbnailator waterpress 水印 缩略图 剪裁

水印和缩略图是一般内容网站很常见的一个功能,而thumbnailator则是java在这方面一个很强大的工具。

首先,在笔者没有使用thumbnailator之前,在网上找了一段生成水印的方法:

    public static void marker2(String srcImgPath, String iconPath, String targerPath, String position, 
			Integer positionX, Integer positionY, Double alpha, Integer degree, Integer minWidth, Integer minHeight) {
        OutputStream os = null;
        try {
        	if(targerPath==null) {
        		targerPath = srcImgPath;
        	}
            Image srcImg
......

freemarker使用BeansWrapper获取静态类型和枚举类型

发表于1年前(Mar 9, 2017 3:54:36 PM)  阅读 1488  评论 0

分类: Java

标签: freemarker 静态类 枚举类 BeansWrapper getStaticModels getEnumModels BeansWrapperBuilder

之前笔者写过一篇文章:Freemarker使用java枚举值、静态属性和调用静态方法,这篇文章里面所提及的方法可以使用,只是笔者最近查找资料看freemarker官方文档的时候,发现笔者之前使用的方法并不是freemarker官方所推荐的方法。

freemarker的设计者,在设计时,分别给静态类和枚举类提供了不同的获取方法。

添加静态方法:

BeansWrapper wrapper = BeansWrapper.getDefaultInstance();
TemplateHashModel staticModels = wrapper.getStaticModels();
TemplateHashModel fileStatics =
    (Temp
......

JGroup无法加入同一组的一种情况

发表于1年前(Feb 26, 2017 1:39:12 PM)  阅读 399  评论 0

分类: Java 开发运维环境

标签: JGROUP 组播通信 集群通信 IPV6

笔者早在几年前就了解过JGroup这个工具,运行过官网上的例子,觉得挺有意思,当时就考虑过这东西可以用来作为集群之间的通讯工具。而最近真正使用它时,发现怎么也跑不了,跑不了也不是说它报错,就是启动两个程序,两个程序分别进入了不同的组,集群名称设置没错,两个程序都是一样的。当时的调试信息就不贴了,没有保留。

后来笔者在网上搜索了很久,终于找到了原因。原理是IPV6的原因,估计是笔者以前使用的是window,版本也比较低,现在使用的mac,带有IPV6功能,JGroup本来是支持IPV6的,但是据说JDK实现有些问题,必须禁用JDK的IPV6功能才行,在JVM配置里面加上下面的语句即可禁用:

-Djava.net.preferIPv4Stack=true

禁用后就连接正常了。

另外补充一句,JGroup4出来了,但是JDK版本要求升高了,至少需使用JDK1.8才行。

SpringBoot获取ApplicationContext

发表于1年前(Feb 26, 2017 1:20:37 PM)  阅读 977  评论 0

分类: Java

标签: spring ApplicationContext WebApplicationContext ApplicationContextAware

首先来看一个工具类:

import org.springframework.context.ApplicationContext;
import org.springframework.web.context.ContextLoader;
import org.springframework.web.context.WebApplicationContext;

public class SpringUtil {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

	}
	
	private static WebApplicationContext ac = null;
	
	private static ApplicationContext getApplicationContext() {
		if(ac==null) {
			ac = ContextLoader.get
......

处理ajax服务由于登录超时返回异常的情况

发表于1年前(Feb 26, 2017 12:04:08 PM)  阅读 620  评论 0

分类: Java WEB前端 JS

标签: ajax 登录超时 401 UNAUTHORIZED

ajax技术现在已经非常普及,常用来异步加载数据,也用来异步加载页面,现在越来越流行的单页应用SPA,页面几乎全是用ajax加载进来的。对于传统页面,如果登录超时,再提交请求时,一般后台将会把用户直接转发到登录页面,而使用ajax请求页面,如果你不注意,可能一不小心,就把登录界面load到当前页面,作为当前页面的一小部分了,这显然不是我们所期望的,接来下笔者说下我是如何处理这种情况的。

补齐HTML标签

发表于1年前(Feb 25, 2017 2:10:33 PM)  阅读 412  评论 0

分类: Java

标签: htmlparse 补齐标签 CompositeTag

在一些博客系统中,非文章阅读页面一般不会显示文章的文章内容,一般是显示文章的摘要信息,而摘要信息的生成,有些系统是由用户自行编辑,而有些系统是通过正文截取的。如果通过截取方式,我们代码一般很难将文章截取得恰到好处,主要是字面断字困难,只能设定截取多少个字符,而内容一般是富文本,即包含html标签,通过字数方式截取,可能将一些html标签从中打断,导致原来的富文本内容html标签不完整,而展现时浏览器会尝试修复,自动补齐丢失的标签,从而造成页面显示异常。

如何解决上面的问题呢,笔者一般通过两种方式解决。一个就是显示摘要时,将所有的html标签都去除显示,这样自然简单很多,但这只适用于小段文本,摘要比较短的情况,试想如果很长一段摘要,无格式显示,对阅读者肯定会造成反感。其次就是补齐html标签,它不是丢了几个标签吗,我们人为给他补上呗。