Spring参数传递实战:从URL到JSON的注解与避坑
后台接口明明写好了前端一调却报400Postman里测得好好的换成axios就传不过去URL上明明带了一堆参数后端一接却收到null……这类问题在Spring开发里太常见了。Spring请求参数传递说到底是“把HTTP请求里各个位置的数据映射到Controller方法形参上”这件事。看起来很简单但它牵扯到URL结构、Content-Type、消息转换、类型转换多个环节任何一个地方对不上表现就是各种千奇百怪的报错。我见过不少同事在这个问题上反复折腾也见过前端同学对着接口文档一脸茫然到底该把参数放在params里还是data里后端用的是RequestParam还是RequestBody这两种情况下前端写法完全不同。下面我按传参方式拆开讲配实操代码和踩坑案例把Spring的参数传递机制一次说清楚。1. 先从HTTP请求本身说起参数的四个“住处”你都知道吗1.1 请求行、请求头、请求体到底各管什么在Spring里谈参数传递绕不开HTTP请求的三个基本组成部分。以POST /api/users?id1024 HTTP/1.1为例请求行就是第一行包含方法POST、目标URL/api/users?id1024和协议版本。请求头是紧随其后的键值对比如Content-Type: application/json、Accept: application/json、Authorization: Bearer xxx。请求体是请求行之后、空行之后的那段内容POST和PUT这类方法通常会携带请求体。既然标题写了Java EE这里插一句背景无论你用的是Spring MVC还是Spring Boot底层跑的还是Servlet容器DispatcherServlet最终面对的就是一个实现了HttpServletRequest接口的对象。请求行、请求头、请求体这三块信息都能从HttpServletRequest上拿到——getRequestURI()拿URL、getHeader()拿头、getInputStream()拿体。理解这一层后面看PathVariable、RequestParam这些注解时就不会觉得它们各自为政了它们本质上是Spring帮你从同一个HttpServletRequest里取数据的快捷方式。1.2 URL上能放参数的四个位置抛开请求头里的Token、Session之类的“元信息”真正的业务参数其实只出现在四个位置参数位置真实请求长什么样Spring对应注解URL路径段/users/1024/orders/99PathVariableURL查询串/users?page1size20RequestParam表单体name张三age18RequestParam / ModelAttributeJSON/XML体{name:张三,age:18}RequestBody可以先做个简单的判断参数在URL上还是在请求体里在URL上时是在路径段里还是在问号后面在请求体里时是普通的键值对形式还是JSON字符串把这四个问题分清80%的参数传递问题都已经解决了。1.3 一个常见误区“POST的参数就一定要写在body里”很多新手默认GET参数在URL、POST参数在body这其实是个误区。POST请求的URL上同样可以带查询参数例如POST /api/users?operatoradmin请求体里再放{name:张三}两者互不干扰。反过来Spring能不能把这两处的参数都接收呢能——operator用RequestParam收请求体用RequestBody收Controller方法可以同时出现这两个注解。真正决定参数该放body还是URL的不是HTTP方法本身而是接口约定的业务语义。举个例子移动端的日志上报接口可以把客户端版本、设备号放在URL查询串里用于网关识别把日志正文放到请求体里这时POST方法的URL照样有参数后端也用RequestParam收版本号用RequestBody收日志正文。搞清楚这一点前端就不会再把query参数塞进data里。2. 路径参数实战PathVariable的常规用法与版本差异2.1 基本用法与参数名映射REST风格接口最常见的传参方式就是把资源ID放在URL路径里比如“查询id为1024的用户”URL是GET /api/users/1024。Controller里的写法RestController RequestMapping(/api/users) public class UserController { private final UserService userService; public UserController(UserService userService) { this.userService userService; } GetMapping(/{id}) public User getUserById(PathVariable(id) Long id) { return userService.findById(id); } }建议显式写PathVariable(id)而不是偷懒写成PathVariable Long id。为什么参数名推断依赖编译时加了-parameters参数很多项目没配一旦编译后形参名被丢弃或变成arg0Spring就找不到对应关系接口直接报“Missing URI template variable”。显式写名字虽然啰嗦但避免了这种不确定性。如果你的项目是用Maven构建的也可以在maven-compiler-plugin里勾上-parameters这样方法参数名在字节码里得以保留写代码时可以省略注解里的名字但团队协作时还是建议保持显式降低沟通成本。2.2 一个容易被忽略的版本差异路径匹配器的变化路径变量有一个进阶用法是用正则把路径模板“框”起来。早期版本里可以这么写GetMapping(/users/{id:\\d}) public User getUserById(PathVariable Long id) { ... }它在AntPathMatcher时代是有效的{id:\\d}表示id这一段必须是数字。但从Spring Boot 2.6开始默认的路径匹配策略改成了PathPatternParser对这类正则路径模板的支持方式和以前不完全一样原来一些合法的写法可能直接报错。我的建议是不要在URL模板里做业务校验。URL的作用是“指明资源在哪”至于id是不是数字、有没有非法字符请在方法内部校验或者让全局异常处理器兜底这样既避免版本兼容问题也让错误提示可控。2.3 路径参数的边界条件与最佳实践路径参数有几个容易踩的边界路径变量默认匹配到下一个/为止。如果某个段位本身需要包含斜杠比如要传一个多级目录路径单个{path}是接不住a/b/c的一般需要改用{*path}这样的多段通配写法或者干脆把这类场景换成查询参数、请求体来传。中文或特殊字符放路径里时前端通常会对URL做编码例如中文变成%E5%BC%A0%E4%B8%89。Spring在解析PathVariable时会帮你解码拿到的是正常字符。但如果前端没有编码或者链路里有网关、Nginx对URL又做了一层处理很可能出现乱码或404。遇到这种情况先看浏览器Network面板里真实发出的URL是什么形态。同一路径下尽量不要出现“一个占位符、一个不占位”的模糊匹配比如/api/users/{id}和/api/users/me同时存在不同版本Spring对这类路由的匹配优先级处理有差异容易产生诡异的结果。me这种固定静态路径建议单独设计或者放在其他路径段下。3. 查询参数实战RequestParam的必填、默认值与多值处理3.1 注解的三个核心属性查询参数在URL问号后面典型场景是列表接口的分页和筛选GET /api/users?page1size20keywordjava。Spring用RequestParam接收GetMapping(/api/users) public Result list(RequestParam(page) Integer page, RequestParam(value size, defaultValue 20) Integer size, RequestParam(value keyword, required false) String keyword) { return userService.pageQuery(page, size, keyword); }这里面有三个属性值得说清楚。required默认值是true也就是说参数必须出现否则Spring直接报400MissingServletRequestParameterException。如果你的接口允许不带某个字段一定要记得标required false。defaultValue和required false经常一起出现它们有细微差别设了defaultValue后即使请求里没有这个参数形参也会被赋默认值只设required false时缺失的参数是null需要自己在代码里做空判断。还有一点常被忽略前端传了空字符串?keywordSpring会把空字符串当作一个合法值绑定到keyword上这跟参数缺失是两回事。很多“参数怎么判断为空”的Bug就出在这——有人用StringUtils.isEmpty判断没问题但如果有RequestParam(required false) Integer age这种写法空字符串转Integer会失败抛类型转换异常。所以前后端约定时尽量明确“空字符串即视为没传”并做统一处理。3.2 同名多值与Map兜底接收查询参数不一定是“一名一值”。比如一次想按多个标签筛选GET /api/posts?tagjavatagspringtagcloud。Controller里收成一个列表GetMapping(/api/posts) public Result list(RequestParam(value tag) ListString tags) { ... }另一种更灵活的写法是用Map接收全部查询参数GetMapping(/api/search) public Result search(RequestParam MapString, String params) { ... }注意不加RequestParam裸写一个Map形参Spring不会把它当成参数收集器它会被当作一个普通复杂对象来绑定结果往往是null。这是新手常踩的坑。用Map接收的好处是接口兼容性高新增筛选条件不用改方法签名缺点是类型全成了String后续要做转换可读性也差一些。我一般推荐在写通用网关、报表导出这类“参数会频繁变动”的接口时用Map业务型接口还是老老实实列明确参数。3.3 和axios GET请求配合时参数到底放在哪里前端用axios发GET请求参数通常放在params配置里axios.get(/api/users, { params: { page: 1, size: 20, keyword: java } })axios在浏览器端会把params序列化成查询串拼到URL上如果你不小心放到data里浏览器实际发出的GET请求是没有任何参数的后端自然收到null。另一个高频坑是参数里带了数组例如tags: [java, spring]axios默认的序列化结果是tags[]javatags[]spring后端如果按tagjavatagspring那种同名多值方式即List tags来接是接不到的。解决方案是给axios配置自定义paramsSerializer或者前后端约定好同一个数组参数的传法比如前端拼成逗号分隔的tagsjava,spring后端用RequestParam String tags接收后自己split。哪种方式都可以关键是两边要对齐。4. 表单绑定实战ModelAttribute如何把零散字段拼成对象4.1 模型绑定的底层原理传统表单application/x-www-form-urlencoded提交的数据长这样name张三age18address.city杭州。当一个Controller方法的形参是一个POJO没有RequestBody注解时Spring走的是模型绑定流程相当于ModelAttribute起的效果PostMapping(/api/users) public Result createUser(UserDTO user) { return userService.create(user); }Spring拿到请求参数后先用反射创建一个UserDTO实例然后遍历请求参数里的每个键值对根据属性名调用对应的setter把字符串值做类型转换后塞进去。这个过程由WebDataBinder驱动它负责三件事参数名到属性的匹配、字符串到目标类型的转换、校验与错误收集。这也是为什么Data、Setter这类代码生成工具能“凭空”让Spring完成绑定——本质上是它们生成了setter方法。4.2 嵌套对象、数组与类型转换的细节嵌套对象的表单怎么写如果UserDTO里有一个Address address字段前端表单里字段名要带点input namename value张三 / input nameage value18 / input nameaddress.city value杭州 / input nameaddress.district value西湖区 /对应Java对象public class UserDTO { private String name; private Integer age; private Address address; // getter/setter 省略 } public class Address { private String city; private String district; // getter/setter 省略 }Spring识别到address.city会先找属性名为address的字段再往它的city属性里塞值。这类“点分路径”在表单绑定里随处可见前端写错一截后端就是静默忽略不报错也不给默认值。排查这类问题时可以把POST请求体拉出来和实体字段一个一个对很多时候就是字段名少了个前缀。数组和List的绑定麻烦在写法不一。前端如果按hobby篮球hobby足球这种方式重复提交同名参数后端可以用ListString hobby或String[] hobby接收。还有一种写法是带下标的hobby[0]篮球hobby[1]足球Spring也支持但下标的连续性一旦中断后面几项可能直接被丢弃。我的建议是能不用下标就不用下标重复同名参数最简单也最不容易错。类型转换也是常见的报错源。表单里传age18abcString转Integer失败Spring默认抛MethodArgumentTypeMismatchException表现是400。更隐蔽的是日期字段表单传birthday1999-01-01实体里的LocalDate birthday字段Spring能不能自动转换取决于有没有注册对应的转换器。Spring Boot的格式化器对LocalDate/LocalDateTime默认支持ISO格式但如果前端传的是1999/01/01或者1999-01-01 12:00:00就建议在字段上明确加DateTimeFormat(pattern yyyy-MM-dd)别指望“应该能转”。4.3 BindingResult的位置规则与参数校验模型绑定和校验经常一起出现。最常见的写法PostMapping(/api/users) public Result createUser(Valid ModelAttribute UserDTO user, BindingResult bindingResult) { if (bindingResult.hasErrors()) { return Result.error(bindingResult.getFieldErrors()); } return userService.create(user); }这里有一个Spring MVC的铁律BindingResult必须紧跟在被校验的参数后面中间插入其他参数直接报错。这是为了把绑定错误和校验错误配对到同一个参数对象上。很多人在后面加了HttpServletRequest参数又加BindingResult结果启动正常、一调用就500检查半天才发现是参数顺序问题。另外ModelAttribute和RequestParam可以混用基本类型参数用RequestParam复杂对象用ModelAttribute或者隐式模型绑定。我习惯在每个需要模型绑定的参数上都显式写ModelAttribute一是语义清楚二是方便配合Valid做校验不写也能工作但代码意图没那么直白。5. JSON请求体实战RequestBody背后的消息转换链路5.1 RequestBody与RequestParam的本质区别前后端分离项目里接口传参的主流已经是JSON了。前端这样请求axios.post(/api/users, { name: 张三, age: 18, address: { city: 杭州 } })后端对应PostMapping(/api/users) public Result createUser(RequestBody UserDTO user) { return userService.create(user); }RequestBody的作用不是“把参数绑到对象上”而是“把整个请求体按照Content-Type声明的格式反序列化成对象”。它和RequestParam有本质区别RequestParam读的是URL查询串或表单体里的键值对RequestBody读的是原始请求字节流交给消息转换器去解析。所以你不能期望一个加了RequestParam的接口能收到JSON对象也不能期望RequestBody能自动接住actioncreatename张三这种表单体除非你能接受把整个form字符串交给转换器。5.2 HttpMessageConverter是怎么选出来的Spring在解析RequestBody时核心机制是HttpMessageConverter。它先看请求头的Content-Type比如application/json;charsetUTF-8然后遍历容器里注册的转换器找到能处理这个媒体类型的那个。JSON请求对应的是MappingJackson2HttpMessageConverter它内部用Jackson把JSON字符串转成目标类型。理解这个机制之后有两个问题就很好解释了。第一为什么前端传了字符串却收到415因为请求头Content-Type不对。比如前端用axios传了一个字符串axios.post(/api/users, {name:张三, age:18})axios对字符串做POST时默认不会自动设置Content-Type为application/json很多浏览器环境里会是text/plain;charsetUTF-8Spring找不到合适的消息转换器直接回415 Unsupported Media Type。第二为什么同样的接口Postman能通、axios不能通多半是Postman的body类型选了“raw JSON”自动带上了application/json头而axios的调用代码里没设置请求头或者Content-Type被某个拦截器改掉了。排查时先看实际发出的请求浏览器F12的Network面板能直接看到请求头内容比后端猜前端猜快得多。5.3 Jackson反序列化的关键细节用RequestBody配合Jackson有几个字段层面的细节建议知道默认情况下JSON里的字段名要和Java字段名一致。不一致时可以在DTO字段上加JsonProperty(front_name)做映射。但你要是担心中后端字段命名风格不统一的更推荐在前端就对齐字段名或者在DTO层面做映射别把事情推迟到Service层。日期字段在JSON里一般配JsonFormat(pattern yyyy-MM-dd HH:mm:ss)同时建议设置timezone属性。不设置时date类型容易差8小时因为Jackson默认按UTC解析和输出。请求体里出现DTO没有的字段时Jackson默认忽略不会报错。如果你希望严格校验可以在配置里开启FAIL_ON_UNKNOWN_PROPERTIES。如果请求体的JSON结构是泛型集合比如ListUserDTO直接写RequestBody ListUserDTO users是没问题的Spring能通过方法签名推断泛型。但如果需要进一步处理泛型嵌套比如ResponseEntityListUserDTO建议用ParameterizedTypeReference搭配RestTemplate或WebClient这个方法在客户端开发时经常会用到。5.4 请求体校验与InputStream一次性问题RequestBody配校验和表单绑定类似PostMapping(/api/users) public Result createUser(Valid RequestBody UserDTO user) { return userService.create(user); }在DTO字段上用NotBlank、Size、NotNull做约束校验失败默认抛MethodArgumentNotValidException需要异常处理器把它转成友好的错误信息。Spring Boot 3里引入了Validated的类级别校验和更多JSR-380约束建议给项目配一个RestControllerAdvice统一处理校验异常否则前端拿到的都是Spring默认的丑陋错误结构。还有一点RequestBody是一次性流。如果你在过滤器或切面里先读了一次输入流后面DispatcherServlet再去读请求体就会拿到空导致RequestBody接到的对象全是默认值。这就是“接口在我本地能通加了日志过滤器就拿到null”的典型原因。解决思路是使用Spring提供的ContentCachingRequestWrapper包装请求或者把日志记录放到Controller里再读取。6. 联调现场的经典翻车400、415、null是怎么产生的6.1 三个典型报错的问题定位表前后端联调时参数类问题集中表现为三种现象。我整理了一个快速的定位表格现象核心原因第一步排查动作400 Bad Request必填参数缺失 / 参数类型转不过去 / JSON结构对不上看后端异常日志区分是MissingServletRequestParameterException还是MethodArgumentTypeMismatchException还是HttpMessageNotReadableException415 Unsupported Media Type请求头Content-Type和后端期望的媒体类型不匹配看Network面板中请求头发送的是什么Content-Type参数为null参数名不一致 / 参数位置放错 / 后端字段名拼写错误用curl或Postman复现对比接口文档与DTO字段这三种现象往往不是独立出现的例如前端用表单形式传了一个JSON对象后端用RequestBody接收可能先是415改了请求头之后变成400再改完结构之后又发现字段名对不上导致null。我一般建议一步到位打开Network面板先看“实际发出的请求长什么样”再对照后端期望的“参数位置参数名Content-Type类型”逐个对齐。6.2 一套可以复制的排查步骤我自己的排查流程是这样的让前端或Postman发请求浏览器F12/Postman控制台记录下来完整的请求行、请求头、请求体。对照后端Controller方法签名确认标注的注解是RequestParam还是RequestBody还是PathVariable。从请求里找到对应的参数位置确认参数名是否和注解里的名字一致大小写是否敏感。看Content-Typequery串、form表单、JSON输入流分别对应不同的处理链路。如果还没定位在Controller方法第一行临时打印参数内容或者直接把HttpServletRequest注入进来调用getParameterMap()和getInputStream()看原始值——这一招能绕开所有注解的干扰直接确认HTTP层到底收到了什么。确认是业务问题后再决定是改前端传参方式还是改后端接收方式。不要两边同时改否则出了问题都不知道谁改坏了。很多人排查参数问题习惯盯着代码看但我更推荐先盯HTTP报文。因为参数传递问题的本质就是报文和Spring解析规则之间的映射报文对了注解自然就对上。6.3 Postman、axios和浏览器各自的“默认行为”差异最后说一个联调中很现实的问题Postman能通axios不通到底是谁的锅多数情况下是“默认行为不同”Postman用“x-www-form-urlencoded”这一项发POST时会自动带Content-Type: application/x-www-form-urlencoded用“raw JSON”时会自动带application/json。你选了哪个它就在请求头里写哪个。axios在浏览器里发对象时一般会自动设application/json发字符串时通常不设Content-Type让浏览器默认决定很多情况会变成text/plain。所以axios调用JSON接口要么传对象让axios自动序列化要么手动加上headers: { Content-Type: application/json }。浏览器直接提交传统表单时Content-Type固定是application/x-www-form-urlencoded这是HTML表单的标准行为没有配置就改变不了。所以一个页面是普通form提交还是ajax JSON提交后端接口设计时就要确定好。我踩过最典型的一次老项目表单登录后端用RequestBody接收用户名密码前端用的是原生form提交结果接口永远报415。后来把后端改成接收表单参数把RequestBody去掉改用ModelAttribute十几秒就解决了。这个例子说明一个道理先看请求长什么样再决定后端注解怎么写而不是反过来。实际开发中我还有一个习惯每建一个新接口会先写一行注释标明“参数来源 Content-Type 前端示例”。比如// POST /api/users body: {name:张三,age:18} Content-Type: application/json这个注释看起来不起眼但对跨端联调的帮助非常大。前后端一旦因为参数问题争执起来把注释拍出来谁对谁错一目了然。参数传递的本质说到底是约定问题而Spring只是把约定翻译成了代码把约定写明白比背再多注解都管用。

相关新闻

用 git filter-repo 高效清理 Git 历史:大文件与敏感信息一次搞定

用 git filter-repo 高效清理 Git 历史:大文件与敏感信息一次搞定

如果你维护过一个超过一年的Git仓库,迟早会遇到一句让人头皮发麻的话:“我好像把不该提交的文件推到远程了。”这句话后面往往跟着几十MB的依赖包、一个写死数据库密码的配置文件,或者是某个再也删不掉的历史大文件。以前大家第一反应是 git …

2026/10/9 10:54:36 阅读更多 →
渲染系统架构设计:从场景数据到屏幕像素的完整流程

渲染系统架构设计:从场景数据到屏幕像素的完整流程

做引擎开发的人,遇到的第一堵看不见的墙,大概率是渲染系统。场景加载进来了,逻辑跑起来了,摄像机一翻转,画面要么闪成雪花,要么帧率掉得莫名其妙——这时候你才意识到,渲染远不是“把模型画出来…

2026/10/9 10:54:36 阅读更多 →
Spring Boot美食分享平台实战:技术选型、数据库设计与部署优化

Spring Boot美食分享平台实战:技术选型、数据库设计与部署优化

1. 美食分享平台项目:为什么我会选 Spring Boot 来做聊到个人博客、内容社区这类项目,我见过太多人一上来就选很重的方案:微服务先拆四个服务、数据库直接上分库分表、消息队列先挂上。结果往往是开发周期拖到三个月,连用户登录都…

2026/10/9 10:54:35 阅读更多 →

最新新闻

脑电左右手运动想象识别:从ERD到CSP的完整工程指南

脑电左右手运动想象识别:从ERD到CSP的完整工程指南

简介:资源基于BCI Competition 2008 Dataset 2b,提供一套完整的左右手运动想象脑电信号识别方案,面向脑机接口、生物医学信号处理的学习者与科研人员。方案从α、β节律的事件相关同步/去同步特性出发,先对单次被试完成脑节律提取…

2026/10/9 11:38:39 阅读更多 →
Swin Transformer融合15种注意力模块:选型、改法与一键复现

Swin Transformer融合15种注意力模块:选型、改法与一键复现

简介:基于Swin-Transformer的注意力融合改进算法实现包,面向机器学习与计算机视觉领域的研究者、算法工程师及竞赛选手,旨在解决单一注意力机制对特征捕捉不充分的问题。压缩包内共十六个脚本文件,整体大小仅二十千字节&#xff0…

2026/10/9 11:38:39 阅读更多 →
kmeans聚类算法Matlab实现指南:原理、参数与常见坑

kmeans聚类算法Matlab实现指南:原理、参数与常见坑

简介:K均值(K-means)聚类算法的Matlab实现详解以单个docx文档形式打包,面向需要掌握无监督学习基础、利用Matlab开展数据聚类分析的初学者与开发者。文档从算法原理入手,逐步讲解kmeans函数的调用方式、基本迭代步骤、…

2026/10/9 11:38:39 阅读更多 →
主动配电网SOCR最优潮流:从论文公式到可运行Python代码

主动配电网SOCR最优潮流:从论文公式到可运行Python代码

简介:本资源是一套面向电力系统方向研究生与高年级本科生的毕业设计级科研实践材料,聚焦双碳目标下综合能源系统(IES)低碳经济运行优化问题,提供从建模、求解到结果分析的完整技术方案。压缩包共25个文件,含…

2026/10/9 11:38:39 阅读更多 →
LSTM时序预测中的不确定度估计:三种可落地建模方法

LSTM时序预测中的不确定度估计:三种可落地建模方法

简介:本资源聚焦LSTM模型在时间序列预测中的不确定度量化问题,面向机器学习进阶学习者、工业智能方向研究者及故障预测实践工程师,解决深度时序模型“黑箱预测”缺乏可信度评估的痛点。压缩包共9个文件,含6个Python脚本&#xff0…

2026/10/9 11:38:39 阅读更多 →
BIOS显示Secure Boot已启用,Linux却报disabled?一文讲透UEFI安全启动状态错位

BIOS显示Secure Boot已启用,Linux却报disabled?一文讲透UEFI安全启动状态错位

1. 先搞清楚这两个"Secure Boot 状态"到底是谁在说话很多人第一次碰到这个现象的时候,反应都差不多:明明进 BIOS 看到 Secure Boot 那一栏写着 Enabled,进系统敲一条命令,返回的却是SecureBoot disabled。于是开始怀疑是…

2026/10/9 11:37:38 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 10:11:06 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 6:17:20 阅读更多 →