ObjectMapper

Jackson - How to prevent ObjectMapper from converting escaped unicode?

岁酱吖の 提交于 2021-01-01 02:14:07
问题 I'm using Jackson 2.4 in Java to do some JSON legwork. I make a call to a remote server with Apache HttpGet, deserialize the results with Jackson into a POJO, manipulate those results, and then serialize them with Jackson to push back to a remote server with HttpPost. The issue I'm finding is that Jackson is translating unicode literals into unicode characters, which I need it not to do thanks to encoding issues on each end. For example, I might have this in the JSON: "field1": "\u00a2" But

spring boot 中文乱码问题

会有一股神秘感。 提交于 2020-12-29 07:28:05
在刚接触spring boot 2.0的时候,遇到了一些中文乱码的问题,网上找了一些解决方法。 这里自己做个汇总。 在application.properties文件中添加: 1 spring.http.encoding.force= true 2 spring.http.encoding.charset=UTF-8 3 spring.http.encoding.enabled= true 4 server.tomcat.uri-encoding=UTF-8 有如上配置后,拦截器中返回的中文已经不乱码了,但是controller中返回的数据依旧乱码。 需要在@RequestMapping(这一类定义请求路径的注解)中增加produces="text/plain;charset=UTF-8" 但是这样就得要限定请求的数据类型,并且需要在每个请求里都加上这个,工作比较繁杂。 可以自己写一个配置文件类,继承WebMvcConfigurationSupport,代码如下: 1 @Configuration 2 public class CustomMVCConfiguration extends WebMvcConfigurationSupport{ 3 4 @Bean 5 public HttpMessageConverter<String> responseBodyConverter(

【实战问题】【15】报错java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast t...

≡放荡痞女 提交于 2020-12-20 07:11:08
场景重现: 调用封装好的接口,返回的数据类型是List,debug可以看到有返回值。但是进行到对list进行操作的那步,报错了(java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to xx)。原来list中的数据是LinkedTreeMap 格式的,并没有转换成对应的实体类。网上查的方法很多是解决json格式字符串转成实体类,而我因为接收到的就是List数据,所以还是想转成能使用的List数据。 写在前面: 尝试多种方法没有解决问题,最终是改了封装的接口,数据格式从源头就错了 原因: 泛型<T>不能强转为List,会有一系列问题 排查历程: (1)最开始我的代码 获取到了List,取出状态有效的数据。如此简单,开心。 // 主要代码 List<UserEntity> userList = this .commentService.getUserList(userId); // 获取数据的接口 List<UserEntity> newList = list.stream().filter(i -> i.getStatus() == 1).collect(Collectors.toList()); // 报错 然后就报错了,返回的数据格式是这样的: (2

什么是接口的幂等性,如何实现接口幂等性?一文搞定

為{幸葍}努か 提交于 2020-12-14 01:13:57
听说微信搜索《Java鱼仔》会变更强哦! 本文收录于 JavaStarter ,里面有我完整的Java系列文章,学习或面试都可以看看哦 每天一个知识点 什么是接口的幂等性,如何实现接口幂等性? (一)幂等性概念 幂等性原本是数学上的概念,用在接口上就可以理解为:同一个接口,多次发出同一个请求,必须保证操作只执行一次。 调用接口发生异常并且重复尝试时,总是会造成系统所无法承受的损失,所以必须阻止这种现象的发生。 比如下面这些情况,如果没有实现接口幂等性会有很严重的后果: 支付接口,重复支付会导致多次扣钱 订单接口,同一个订单可能会多次创建。 (二)幂等性的解决方案 唯一索引 使用唯一索引可以避免脏数据的添加,当插入重复数据时数据库会抛异常,保证了数据的唯一性。 乐观锁 这里的乐观锁指的是用乐观锁的原理去实现,为数据字段增加一个version字段,当数据需要更新时,先去数据库里获取此时的version版本号 select version from tablename where xxx 更新数据时首先和版本号作对比,如果不相等说明已经有其他的请求去更新数据了,提示更新失败。 update tablename set count=count+1,version=version+1 where version=#{version} 悲观锁 乐观锁可以实现的往往用悲观锁也能实现

Springboot的异常处理与自定义异常

守給你的承諾、 提交于 2020-12-12 18:47:19
园友们好,元旦很快就到来了,提前祝各位园友们元旦快乐,今天给大家分享一个工作中必用一个知识点,就是使用枚举构建自定义异常并应用于springboot的异常处理器。开始之前我先把这个案例的结构大致说明一下: 1、使用idea创建一个springboot的Gradle/Maven项目,引入web模块即可(由于案例的重点是异常处理,所以跳过其他操作)。 2、创建一个javabean,用来接收前台的参数。 3、创建一个枚举、封装异常的错误码等信息。 4、创建一个自定义异常类继承RuntimeException。 5、创建一个controller,用来处理用户请求。 6、创建一个springboot的异常处理类。 7、运行项目,测试。 OK、接下来就进入正题,先来第一步,创建项目(创建项目的过程就不需要一一演示了吧,^_^),下面是创建项目之后的Gradle项目中build.gradle中的依赖: 1 dependencies { 2 implementation('org.springframework.boot:spring-boot-starter-web' ) 3 testImplementation('org.springframework.boot:spring-boot-starter-test' ) 4 } 如果各位读者是maven项目的话,pom

真没想到,Springboot能这样做全局日期格式化,有点香!

旧城冷巷雨未停 提交于 2020-12-11 12:51:34
本文收录在 GitHub 地址 https://github.com/chengxy-nds/Springboot-Notebook 说在前边 最近部门几位同事受了一些委屈相继离职,共事三年临别之际颇有不舍,待一切手续办妥帖,寒暄过后送他们出公司,几个老哥临别时冲我鬼魅一笑,我顿时心里一紧有种不好的预感,这事绝对没有这么简单。等我接手这几个大佬的项目后,应验了我的预感,此刻我居然有点后悔,为啥送别之时没揍他们一顿!哈哈哈~ 而这种打人的冲动,在我开始优化几位老哥的项目时候,变得越来越强烈。 有个坑 技术部每个月都会组织一下代码走查及优化,以前是各自审查优化自己的项目,如今几位老哥的离职他们的项目就落到了我的头上。对于程序员来说最痛苦的事情就是接手别人的项目,还要做优化改造,因为这一点也不比重构一遍项目简单。不过,军令在前,没办法硬着头皮上吧! 第一个优化的点就让我有点崩溃,这几个大佬的技能能力很强,一直都是我学习的榜样,但在项目里几乎所有的日期格式化都这样用 SimpleDateFormat ,像如下代码这样实现,emm~ ,受过伤的男人怎么啥事都做的出来,哈哈哈~ SvcOrderDailyStatisticsPo orderDailyStatisticsPo = new SvcOrderDailyStatisticsPo(); SimpleDateFormat

项目需要的第三方插件

99封情书 提交于 2020-12-06 10:29:40
第三方插件 # Uncomment the next line to define a global platform for your project platform :ios, '10.0' target 'DYWX' do # Comment the next line if you don't want to use dynamic frameworks use_frameworks! # Pods for DYWX pod 'Alamofire' # 4.x pod 'SnapKit' pod 'Kingfisher' pod 'Moya' pod 'Moya-SwiftyJSONMapper' pod 'IQKeyboardManagerSwift' pod 'ESPullToRefresh' pod 'ObjectMapper', '~> 3.3' # 轮播图 pod 'SBCycleScrollView','~> 0.0.8' pod 'RxSwift' pod 'RxCocoa' end @_exported import Alamofire @_exported import SwiftyJSON @_exported import KakaJSON 插件文档 Alamofire SnapKit Kingfisher Moya Moya

springboot xss防护

↘锁芯ラ 提交于 2020-12-04 17:50:18
概述   XSS(Cross Site Script)全称跨站脚本攻击,为了跟CSS区分开来,所以变成了XSS。它允许恶意代码植入到正常的页面中,盗取正常用户的账号密码,诱使用户访问恶意的网站。 攻击   实施XSS攻击必须具备两个条件 向web页面注入恶意代码。 这些恶意代码能够被浏览器执行。 看一个简单的demo,更能清晰的了解什么XSS攻击 @RequestMapping(value = "/demo11",method = RequestMethod.GET) public String demo11(@RequestParam String name,@RequestParam int age) { return name; } 我们输入访问地址 127.0.0.1:8080/demo11?name=<script>alert("正在发动xss攻击")</script><a href="http://www.baidu.com">澳门皇家赌场上线了<a>&age=11 点击诱惑连接 这就是一个简单的反射性XSS攻击,也叫非持久性XSS,将非法代码提交到服务器,服务器解析并响应,而响应中包含XSS代码,最后浏览器解析并执行。另一种XSS攻击也叫持久型XSS,将XSS代码发送到服务器,如果没有后台效验,直接给存上了,在回显时,会从服务起解析加载出来,浏览器发现XSS代码

springmvc返回中文乱码问题

荒凉一梦 提交于 2020-11-28 07:33:43
关于springmvc的返回中文乱码的问题,网上可谓是清一色的一样,无外乎就两种,要么在局部类或这方法上解决,类似如下的代码: 1 @GetMapping(value="/error/query",produces="text/json;charset=utf-8" ) 2 public String getMessage(){ 3 return "增加对字符编码限制" ; 4 } 另一种方式是在springmvc.xml中配置对应的全局参数,类似下面列举的部分: 1 < mvc:message-converters > 2 < bean class ="org.springframework.http.converter.StringHttpMessageConverter" > 3 < property name ="supportedMediaTypes" > 4 < list > 5 < value > text/plain;charset=utf-8 </ value > 6 < value > text/html;charset=UTF-8 </ value > 7 </ list > 8 </ property > 9 </ bean > 10 </ mvc:message-converters > 当然上面列举的这个是针对返回值为string类型

Spring RestTemplate 之put、delete请求

夙愿已清 提交于 2020-11-27 04:59:24
●PUT请求:在RestTemplate中,PUT请求可以通过put方法调用,put方法的参数和前面介绍的postForEntity方法的参数基本一致,只是put方法没有返回值而已。举一个简单的例子,如下:(缺点:没有返回值,不能得到接口的返回) @RequestMapping("/hello7/{flag}") public String getHello7() throws Exception { HttpHeaders header = new HttpHeaders(); header.setContentType(MediaType.APPLICATION_JSON_UTF8); Map<String, Object> m = new HashMap<String, Object>(); m.put("t1", "xx"); m.put("flag", "1"); ObjectMapper mapper = new ObjectMapper(); String value = mapper.writeValueAsString(m); HttpEntity<String> entity = new HttpEntity<String>(value,header); restTemplate.put("http://10.145.198.143:8081/ords/data