@JsonRawValue 注解

1. 问题

在实际开发中我遇到这样一个问题,查询数据库的结果返回的content内容是含有转义符的JSON字符串,但是我需要返回的不包含转移的String字符串。经过我一顿折腾并未发现解决办法,直到@JsonRawValue注解。import com.fasterxml.jackson.annotation.JsonRawValue;

{
  "code": 200,
  "data": {
    "content": "[[\"ID\",\"名字\",\"别名\",\"国籍\",\"性别\",\"毕业院校\",\"民族\",\"经纪公司\",\"职业\",\"血型\",\"身高\",\"体重\",\"出生地\",\"出生日期\",\"主要成就\",\"代表作品\"],[\"0c3474ab3c79db930cfca1a88a47e5f5\",\"白冰\",\"白小冰、冰冰、二公主、冰姐\",\"中国\",\"女\",\"西北政法大学\",\"汉族\",\"英皇娱乐集团有限公司\",\"演员、歌手\",\"AB型\",\"165 cm\",\"44 kg\",\"陕西省西安市\",\"1986年5月2日\",\"第4届华鼎奖中国最受观众喜爱的女演员奖\",\"神话,红楼梦、隐婚男女、凰图腾、隋唐演义\"],[\"947aefe8e061d34307c4f884c6b8408a\",\"陈龙\",\"陈洁\",\"中国\",\"暂无\",\"上海戏剧学院\",\"汉族\",\"北京时代电影有限公司\",\"演员\",\"O型\",\"180 cm\",\"68 kg\",\"上海市\",\"1976年7月24日\",\"第39届台湾金钟奖最佳男配角2015国剧盛典最具突破精神男演员\",\"真空爱情记录、新水浒传、少年杨家将、琅琊榜、猎场、欢乐颂2\"],[\"cc07a5b18aa515c31cefcda2811733c5\",\"甘昀宸\",\"暂无\",\"中国\",\"男\",\"北京电影学院表演系\",\"暂无\",\"暂无\",\"演员\",\"O型\",\"180 cm\",\"暂无\",\"新疆维吾尔自治区乌鲁木齐市\",\"1988年1月1日\",\"暂无\",\"藤科动物也凶猛、了不起的夜晚、不虚此行\"],[\"6663a8c7c5d839150b707b03f5d7bbe8\",\"高圆圆\",\"暂无\",\"中国\",\"女\",\"中国劳动关系学院\",\"汉族\",\"华视娱乐传媒(广州)有限公司\",\"演员、模特\",\"A型\",\"165 cm\",\"48 kg\",\"北京市丰台区\",\"1979年10月5日(己未年八月十五)\",\"第52届韩国电影大钟奖最佳海外女演员奖第31届香港电影金像奖最佳女主角提名第18届北京影视春燕奖最佳女主角奖第11届中国电影表演艺术学会奖新人奖\",\"咱们结婚吧、倚天屠龙记、青红、十七岁的单车、南京!南京!、单身男女、搜索、一生一世\"],[\"fba5427da6f0cf046b9620ec4496ea90\",\"古力娜扎\",\"暂无\",\"中国\",\"暂无\",\"北京电影学院\",\"维吾尔族\",\"北京和颂文化经纪有限公司\",\"演员、模特\",\"A型\",\"172 cm\",\"暂无\",\"新疆乌鲁木齐市\",\"1992年5月2日\",\"第15届中国电影表演艺术学会金凤凰奖学会新人奖\",\"十年三月三十日、择天记、缝纫机乐队、仙剑云之凡、柠檬初上、青丘狐传说、轩辕剑之天之痕、风起霓裳、无与伦比的美丽\"]]",
    "id": 1209
  },
  "msg": "success"
}

在这里插入图片描述
加上这个注解后,返回的结果就变成这样了,解决了问题。

{
  "code": 200,
  "data": {
    "content": [
      [
        "ID",
        "名字",
        "别名",
        "国籍",
        "性别",
        "毕业院校",
        "民族",
        "经纪公司",
        "职业",
        "血型",
        "身高",
        "体重",
        "出生地",
        "出生日期",
        "主要成就",
        "代表作品"
      ],
      [
        "0c3474ab3c79db930cfca1a88a47e5f5",
        "白冰",
        "白小冰、冰冰、二公主、冰姐",
        "中国",
        "女",
        "西北政法大学",
        "汉族",
        "英皇娱乐集团有限公司",
        "演员、歌手",
        "AB型",
        "165 cm",
        "44 kg",
        "陕西省西安市",
        "1986年5月2日",
        "第4届华鼎奖中国最受观众喜爱的女演员奖",
        "神话,红楼梦、隐婚男女、凰图腾、隋唐演义"
      ],
     ...
    ],
    "id": 1209
  },
  "msg": "success"
}

2. @JsonRawValue 注解说明

@JsonRawValue是Jackson框架提供的一个注解,用于标记一个字段的内容应该原样输出,而不进行额外的转义或处理。
作用:
原样输出:该注解会让Jackson在序列化时,原样输出该字段的值,尤其是对于字符串类型的字段。它告诉Jackson这个字段内容是已经处理过的JSON格式内容,应该直接当做原始数据返回,而不进行额外的序列化操作。

避免转义:常规情况下,字符串中的特殊字符(比如"、\n、\t等)在JSON序列化时会被转义。例如,content字段中的JSON字符串可能包含双引号和反斜杠,这会在序列化时被转义成"、\等,而加了@JsonRawValue注解后,这些特殊字符就会直接输出,保持原样。

适用场景:

  1. 存储并传递原始JSON:当你需要传递一个已经序列化的JSON字符串,且不希望它被Jackson再次序列化。
  2. 避免额外的转义:比如,存储HTML代码或JSON结构,确保它们在返回时不被转义。

依赖:
@JsonRawValue注解是Jackson库中的一部分,属于Jackson的核心模块jackson-annotations,通常情况下,你需要以下两个核心依赖来使用它:

jackson-annotations:提供注解的支持,包含@JsonRawValue等常用注解。
jackson-databind:包含了Jackson的序列化和反序列化功能,实际上执行数据转换。

pom依赖

注意:spring-boot-starter-web 这个依赖已经间接包含了 Jackson 库

<dependencies>
    <!-- Jackson annotations dependency -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>2.15.0</version>  <!-- 使用你项目中合适的版本 -->
    </dependency>

    <!-- Jackson databind dependency (contains serialization and deserialization logic) -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.15.0</version>  <!-- 使用你项目中合适的版本 -->
    </dependency>
</dependencies>

2025-03-04 10:19:24.932 ERROR 26684 --- [http-nio-19002-exec-1 : io-19002-exec-1] o.a.j.l.DirectJDKLog [log:175] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.RuntimeException: com.fasterxml.jackson.core.JsonParseException: Unexpected character ('j' (code 106)): was expecting comma to separate Object entries at [Source: (String)"{"localParams":[],"resourceList":[],"customConfig":1,"json":"{"job":{"setting":{"speed":{"channel":1,"byte":1048576},"errorLimit":{"record":0,"percentage":0.02}},"content":[{"reader":{"name":"mysqlreader","parameter":{"username":"1111111","password":"1111111","column":["idlink_va","idsite","idvisitor","idvisit","idaction_url_ref","idaction_name_ref","custom_float","pageview_position","server_time","idpageview","idaction_name","idaction_url","search_cat","search_count","time_spent_ref_ac"[truncated 1836 chars]; line: 1, column: 65]] with root cause com.fasterxml.jackson.core.JsonParseException: Unexpected character ('j' (code 106)): was expecting comma to separate Object entries at [Source: (String)"{"localParams":[],"resourceList":[],"customConfig":1,"json":"{"job":{"setting":{"speed":{"channel":1,"byte":1048576},"errorLimit":{"record":0,"percentage":0.02}},"content":[{"reader":{"name":"mysqlreader","parameter":{"username":"1111111","password":"1111111","column":["idlink_va","idsite","idvisitor","idvisit","idaction_url_ref","idaction_name_ref","custom_float","pageview_position","server_time","idpageview","idaction_name","idaction_url","search_cat","search_count","time_spent_ref_ac"[truncated 1836 chars]; line: 1, column: 65] at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:2477) ~[jackson-core-2.15.3.jar:2.15.3] at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:750) ~[jackson-core-2.15.3.jar:2.15.3] at com.fasterxml.jackson.core.base.ParserMinimalBase._reportUnexpectedChar(ParserMinimalBase.java:674) ~[jackson-core-2.15.3.jar:2.15.3] at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._skipComma(ReaderBasedJsonParser.java:2462) ~[jackson-core-2.15.3.jar:2.15.3] at com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextFieldName(ReaderBasedJsonParser.java:953) ~[jackson-core-2.15.3.jar:2.15.3] at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:321) ~[jackson-databind-2.15.3.jar:2.15.3] at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177) ~[jackson-databind-2.15.3.jar:2.15.3] 按照上面加了自定义反序列化器,还是不能成功解析成对象
最新发布
03-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

boy快快长大

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值