当前位置: 首页 > wzjs >正文

建站后角度是不是0wordpress怎么关注站点

建站后角度是不是0,wordpress怎么关注站点,临邑县建设局网站,西安的做网站的公司ResponseBody 注解转换为 JSON 的原理与实现详解 1. 核心作用 ResponseBody 是 Spring MVC 的一个注解,用于将方法返回的对象直接序列化为 HTTP 响应体(如 JSON 或 XML),而不是通过视图解析器渲染为视图(如 HTML&…

在这里插入图片描述

@ResponseBody 注解转换为 JSON 的原理与实现详解


1. 核心作用

@ResponseBody 是 Spring MVC 的一个注解,用于将方法返回的对象直接序列化为 HTTP 响应体(如 JSON 或 XML),而不是通过视图解析器渲染为视图(如 HTML)。

  • 关键作用
    • 跳过视图解析阶段,直接返回数据。
    • 触发 消息转换器(HttpMessageConverter) 将对象转换为指定格式(如 JSON)。

2. 工作流程详解
步骤 1:方法返回对象
@RestController
public class UserController {@GetMapping("/user")public User getUser() {return new User("John", 25); // 返回 Java 对象}
}
步骤 2:触发消息转换
  • Spring 检测到 @ResponseBody:跳过视图解析,直接进入消息转换阶段。
  • 选择合适的 HttpMessageConverter
    • 根据 返回对象类型请求的 Accept 头(如 application/json)选择转换器。
    • 默认情况下,Spring Boot 自带的 Jackson 库 提供的 MappingJackson2HttpMessageConverter 会被选中。
步骤 3:Jackson 序列化对象
  • Jackson 的 ObjectMapper:负责将 Java 对象转换为 JSON 字符串。
  • 序列化过程
    1. 遍历对象的 getter 方法字段
    2. 根据注解(如 @JsonProperty)和配置(如日期格式)处理属性。
    3. 忽略 transient 字段或 @JsonIgnore 标记的字段。
// 示例 JSON 输出
{"name": "John","age": 25
}

3. 完整代码示例

3.1 实体类(User.java)
public class User {private String name;private int age;// 构造函数、getter 和 setter 方法public User(String name, int age) {this.name = name;this.age = age;}// 省略 getter/setter
}
3.2 控制器(UserController.java)
import org.springframework.web.bind.annotation.*;@RestController // 等效于 @Controller + @ResponseBody
public class UserController {@GetMapping("/user")public User getUser() {return new User("John", 25); // 直接返回对象,由 @ResponseBody 触发转换}@PostMapping("/user")public User createUser(@RequestBody User user) {// 处理 POST 请求,将 JSON 反序列化为 User 对象return user;}
}
3.3 测试请求
# GET 请求获取 JSON
curl http://localhost:8080/user
# 输出:{"name":"John","age":25}# POST 请求发送 JSON
curl -X POST -H "Content-Type: application/json" -d '{"name":"Jane","age":30}' http://localhost:8080/user

4. 消息转换器(HttpMessageConverter)详解

Spring MVC 通过 HttpMessageConverter 完成对象到 HTTP 响应的转换。

  • 核心接口HttpMessageConverter<T>

    • canRead():判断是否支持反序列化(如 JSON → 对象)。
    • canWrite():判断是否支持序列化(如对象 → JSON)。
    • write():实际执行序列化操作。
  • 常用实现类

    类名作用默认支持格式
    MappingJackson2HttpMessageConverterJSON 转换(依赖 Jackson 库)application/json
    MappingJackson2XmlHttpMessageConverterXML 转换(需额外配置)application/xml
    StringHttpMessageConverter字符串转换text/plain

5. Jackson 配置与自定义

通过自定义 ObjectMapper 可控制 JSON 序列化行为:

5.1 配置示例
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.text.SimpleDateFormat;@Configuration
public class JacksonConfig {@Beanpublic ObjectMapper objectMapper() {ObjectMapper mapper = new ObjectMapper();// 设置日期格式mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));// 忽略未找到的字段(反序列化时)mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);return mapper;}
}
5.2 常用注解
注解作用
@JsonProperty指定 JSON 键名(覆盖字段名)。
@JsonFormat定制日期/数字格式。
@JsonInclude控制字段是否参与序列化(如 @JsonInclude(JsonInclude.Include.NON_NULL))。
@JsonIgnore忽略字段。

6. 常见问题与解决方案

Q1:为什么 JSON 中没有某个字段?
  • 可能原因
    • 字段没有 getter 方法。
    • 字段被 @JsonIgnoretransient 修饰。
    • @JsonInclude 配置排除了该字段(如 NON_NULL 且值为 null)。
Q2:如何处理循环引用?
  • 解决方案
    @JsonManagedReference // 主对象(单向引用)
    @JsonBackReference // 被引用对象(忽略反向引用)
    
Q3:如何自定义序列化逻辑?
  • 自定义序列化器
    public class CustomSerializer extends JsonSerializer<Date> {@Overridepublic void serialize(Date value, JsonGenerator gen, SerializerProvider serializers)throws IOException {gen.writeString(new SimpleDateFormat("yyyy-MM-dd").format(value));}
    }
    
Q4:如何禁用 HTML 转义?
  • 配置
    @Bean
    public MappingJackson2HttpMessageConverter jackson2HttpMessageConverter() {MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();converter.getObjectMapper().disable(SerializationFeature.ESCAPE_NON_ASCII);return converter;
    }
    

7. 总结表格
环节关键组件职责
触发转换@ResponseBody告知 Spring 直接返回数据,跳过视图解析。
选择转换器HttpMessageConverter根据返回类型和 Accept 头选择合适的转换器。
序列化JacksonObjectMapper将 Java 对象转换为 JSON 字符串。
配置扩展自定义 ObjectMapper精细控制序列化格式、日期、忽略策略等。

总结

@ResponseBody 通过结合 HttpMessageConverter 和 Jackson,将 Java 对象无缝转换为 JSON 响应。掌握其工作原理和配置方法,可以灵活处理 RESTful API 的数据格式化需求。对于复杂场景(如自定义序列化、处理循环引用),可通过 Jackson 的注解和配置进一步优化。


文章转载自:

http://NvdMj2Oq.zwppm.cn
http://Kjf9BnKb.zwppm.cn
http://GlPvtaca.zwppm.cn
http://BdrG11nj.zwppm.cn
http://9tBn0fWt.zwppm.cn
http://mtmNpOMO.zwppm.cn
http://XsavE8Og.zwppm.cn
http://HnsT8wRv.zwppm.cn
http://rKRRTJpo.zwppm.cn
http://GSjaZEol.zwppm.cn
http://QAE4rSh7.zwppm.cn
http://mpECGQkn.zwppm.cn
http://5oaOUPSx.zwppm.cn
http://IGpo9IVA.zwppm.cn
http://uX6BISwW.zwppm.cn
http://u8gyrpbx.zwppm.cn
http://j1k2z3sz.zwppm.cn
http://DoReVN3E.zwppm.cn
http://7Y46of41.zwppm.cn
http://OnzN90hV.zwppm.cn
http://zKuc7Pfi.zwppm.cn
http://MRe0DRHH.zwppm.cn
http://UDiN9de8.zwppm.cn
http://0te2ffXh.zwppm.cn
http://s8Uq7cNs.zwppm.cn
http://6fR0tztz.zwppm.cn
http://S61nh5fY.zwppm.cn
http://ImcvFIw2.zwppm.cn
http://x9d1q1bA.zwppm.cn
http://SnNPn6oJ.zwppm.cn
http://www.dtcms.com/wzjs/701560.html

相关文章:

  • 编程跟做网站山东建站商城
  • 个人信息网站建设的心得体会wordpress 支付下载
  • 网站首页幻灯片不显示返利网站 帐如何做
  • 集团公司网站源码下载aws wordpress 免费
  • 上传网站 php 服务器怎么用html做个人的网页
  • 网站怎么注册做资讯的网站
  • 微信网站怎么做手机网页视频下载神器
  • 一份完整的活动策划合肥seo网站多少钱
  • 叮当网站做app网龙网络公司简介
  • 个人做网站赚钱建设门户网站
  • 装修设计图网站排名商城建站
  • 服务器网站崩溃自己的网站什么做优化
  • 做游戏下载网站赚钱php能区别电脑网站和手机网站吗怎么嵌入到phpcms
  • 外贸网站如何做推广怎么样wordpress 小刀娱乐
  • wp网站建设模板小程序推广网站
  • 红安县城乡建设局网站网络游戏名字
  • 公司广告片拍摄公司杭州seo泽成
  • 怎么自己做微网站吗linux下搭建wordpress
  • 哪些企业网站做的比较好最版网站建设案例
  • 怎么用新浪云做淘宝客网站网站建设平台简介
  • 北京网站优化实战广西网站建设费用
  • 阿里云搭建网站教程网页美工设计心得体会
  • seo网站沙盒期做美食直播哪个网站最好
  • 网站开发电脑内存要多少电子商务 网站前台功能
  • 做网站公司什么条件做物流网站
  • 什么网站上面能接点小活做自己app的制作费用多少
  • 网站开发属于软件开发行业吗青岛网站建设哪家更好
  • 苏州公司做网站织梦做的网站别人提交给我留的言我去哪里看
  • 商城网站开发需要多少钱企业网站的建立标准
  • 诚信网站体系建设工作总结网站加v怎么做