(狂神)SpringMVC笔记-----04

乱码问题解决

创建一个表单页面:

 让它跳转到Controller

Controller把前端页面接收到的值传给接收值的test页面中:

目前就是一个简单的利用Model获取前端参数的操作。我们去运行一下代码:

我们输入英文并没有什么异常。

当我们输入中文:

我们发现中文乱码。

我们再来看控制台:

 由此可知,在java层面上,就已经发生乱码了。

因此我们要想办法处理乱码问题。

可能会有人想到用request.setCharacterEncoding方法,那我们看看能不能解决呢?

 再次运行:

 我们发现依然产生乱码。

因为当前端输入信息,到Controller层的方法中的括号里String name中传值时就已经产生乱码了,所以我们不能再前端设置utf-8来解决这个问题。

所以我们要利用过滤器解决乱码问题。

我们写一个过滤器工具类用于解决乱码:

我们已经写了Filter过滤器,那么我们就应该在web.xml中配置:

 

我们去运行一下:

 我们发现我们的web.xml:

 我们的url-pattern的路径是/ 是拦截所有,我们不应该拦截Jsp页面,所以我们把/改成/*:

再次运行:

 

我们发现不再乱码了。

我们改成用get:

 

 再运行一下:

 

 因此我们可以知道,这种过滤器的方法是可以解决SpringMVC中的乱码问题的。

如果是get请求的方式,我们的web.xml中的url-pattern如果是/的方式:

再去运行:

 这也可以,这就比较神奇了。所以如果使用get,那么只要加Filter过滤器就可以了,但是如果是使用Post必须还得把web.xml中的url-pattern改成/*,不拦截jsp页面。

但是我们这是使用javaweb的filter方式,不是springmvc的方式,而且这种方式不够强大。我们建议使用SpringMVC自带的过滤器方式,直接在web.xml中配置即可。我们注释掉之前web.xml中的filter配置。使用SpringMVC推荐的方式:

学框架就是让我们的东西变得轻松。

我们先用Post请求运行一下:

 

 

依然乱码,我们把url-pattern改成/*:

乱码解决了。

我们换成Get方法:

我们现在使用的是get的方式,那么我们把url-pattern换成/呢:

 在运行:

 我们发现这个和之前的规律还是一样的,如果是get方法url-pattern写/或/*都可以,如果是post必须要写/*。

这种方式省去了写filter类的步骤。但是有时候对get过滤乱码支持不是很好。

如果这些方式都不好使,还有可能是tomcat里没有写上响应的设置:

 Json

这部分很重要,学java后台,Json是必须掌握的一门技术。

先写一下javascript的代码,因为我们知道javascript对象和json对象可以互相转换:

运行:

 我们发现上面的是字符串也就是json对象,下面的是正常的javascript对象。

Jackson的使用

新建子项目

 1.在maven中加载jackson

 web.xml里的内容是基本固定的:

然后我们去配置springmvc文件:

 我们只需写扫描包和视图解析器即可:

 我们新建一个类:

首先因为要使用lombok,我们要去在maven文件中引入lombok:

 

接下来我们写个Controller:

 运行结果:

但是这只是字符串,并不是json对象。我们先不去解决这个乱码问题。

我们现在先创建出来一个json对象。看看json是什么样子的:

运行:

虽然仍然是乱码的形式,但是我们可以发现,是kv键值对的形式。已经输出了json对象形式。

所以现在我们就是要去解决一下乱码问题。

我们这个时候加上@RequestMapping里的乱码解析器:

我们再运行一下:

乱码解决了。但是我们发现这种方式是我们需要手动去写一些代码的,在SpringMVC框架中一定是有一种不需要我们手写的注解可以解决这个问题的。

我们在Controller中,不用去任何手动的代码:

 我们在SpringMVC文件配置乱码:

 

这部分代码是固定的,以后我们用SpringMVC框架就可以直接把这部分配置出来。

运行一下:

 我们这种不走视图解析器,直接返回字符串是用两个注解,@Controller和@ResponseBody来实现的。我们也可以只用一个注解 @RestController来实现:

我们以后如果是做前后端分离的项目,我们都不会让Controller去走视图解析器层,都会是去直接返回一个json字符串对象。

我们之前是用json去返回一个对象,如果我们想利用json去返回一个集合对象呢:

我们去运行一下:

 

我们接下来利用json去返回一个时间对象:

 

 运行一下:

 

 ObjectMapper时间解析后的默认格式为时间戳 Timestamp 1970年到现在的毫秒数

我们现在想要让时间返回的值是我们可以看得懂的:
我们知道java里有simpledateformat日期格式化类可以去做:

运行一下:

 

当然在SpringMVC中针对于json,也自带可以给日期格式化的方式,不需要使用时间戳,但是比较麻烦:

 

我们可以看到,我们没有使用时间戳 ,我们并没有利用日期格式化对象的format方法去格式化日期,我们只是把想要格式化的格式注入到mapper对象中,然后只要直接返回Date对象date就可以自动转成格式化的样子了。我们去运行验证一下:

 

之前我们也说过了,一段重复使用多次的代码尽量单独拿出来做成工具类,如果让代码重复太多,不符合开发习惯。我们可以看到在这段代码中,无论是把一个java类转换成json,还是把一个集合转换成json还是把一个日期类转换成json。都有两部分代码是重复使用的:

ObjectMapper对象的创建实例化和writeValueAsString()方法返回json对象。

所以我们接下来把这两个部分封装到一个工具类中,使用时就去调用就好了。

我们现在在Controller层就不需要写那么多代码了:

 

我们再去运行一下:

 

我们前两个方法也想用工具类,那么我么就需要再写一个方法在工具类中:

 我们的工具类更改为:

 我们直接使用方法的重载,若是传入一个参数就走上面的方法,若是传入两个参数就走下面的方法。

Controller层更改为:

我们只需要写功能,转成json格式的操作就交给工具类就好了。

运行一下:

 

总结:

第一步在maven中导入对应的包

第二步:在springmvc文件中配置乱码问题

第三步:写工具类 ObjectMapper对象的创建 ,writeValueAsString方法的调用

第四步:在Controller层写出具体把一个对象转换成json格式的代码 使用@RestController或者是使用@Controller和@ResponseBody 

Fastjson的使用

1.在maven中导包:

 

我们去使用一下:

运行一下:

 

在我们向maven里导包的时候,要记得配置一下idea里的web-Artifact里的包加载进去。

这种方式更加便捷,我们发现我们甚至都不需要去写工具类了。

最后我们的fastjson里还有几个固定的写死的代码,我们可以去用:

 

运行:

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值