global-exception-handler.java.ftl 模板文件参考示例

java利用ftl生成word简单实例 近日项目涉及到Word的导出,四处需找资料。可惜网上实例太少,只好根据别人的思路写一下这个简单的实例。以后也许会补充图片导出Word模块,敬请其代表吧!还有,本实例只适合初学者。大牛绕路。当然本实例也存在不足之处,请各位多多包含。 立即下载

以下是添加了详细中文注释说明的 global-exception-handler.java.ftl 模板文件,涵盖异常处理的设计哲学、各类异常的处理策略、安全考量及企业级最佳实践:

package ${package.Config};

<#-- 导入自定义业务异常 -->
import ${package.Exception}.BusinessException;
<#-- 导入统一响应类 -->
import ${package.Common}.ApiResponse;
<#-- 导入 Spring Validation 异常 -->
import org.springframework.validation.BindException;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

<#-- 导入 JSR-303 路径变量校验异常 -->
import javax.validation.ConstraintViolationException;
<#-- 导入验证结果相关类 -->
import org.springframework.validation.FieldError;

/**
 * <p>
 * 全局异常处理器
 * </p>
 *
 * <p>
 * 【核心作用】
 * 1. 统一捕获 Controller 层抛出的所有异常
 * 2. 将异常转换为标准的 {@link ApiResponse} 格式返回给前端
 * 3. 避免将内部堆栈信息暴露给客户端(安全要求)
 * 4. 实现“异常即契约”的 API 设计理念
 * </p>
 *
 * <p>
 * 【设计原则】
 * - 使用 {@code @RestControllerAdvice}:组合了 {@code @ControllerAdvice} 和 {@code @ResponseBody}
 *   - 全局生效(所有 Controller)
 *   - 返回值自动序列化为 JSON
 * - 异常处理方法按 **具体到通用** 顺序排列(Java 方法重载解析规则)
 * - 每个异常类型有独立的处理逻辑,职责清晰
 * - 生产环境绝不返回堆栈信息(防止信息泄露)
 * </p>
 *
 * <p>
 * 【异常处理优先级】
 * 1. {@link BusinessException} → 业务异常(最高优先级)
 * 2. {@link MethodArgumentNotValidException} → @RequestBody 校验失败
 * 3. {@link BindException} → 表单参数(application/x-www-form-urlencoded)校验失败
 * 4. {@link ConstraintViolationException} → 路径变量/请求参数校验失败
 * 5. {@link Exception} → 通用兜底(最低优先级)
 * </p>
 *
 * <p>
 * 【安全红线】
 * - 所有异常消息必须经过脱敏处理
 * - 系统级异常(如数据库连接失败)返回通用友好提示
 * - 详细错误日志应记录到服务端(ELK/Sentry),而非返回给前端
 * </p>
 *
 * @author ${author}
 * @since ${date}
 */
@RestControllerAdvice
public class GlobalExceptionHandler {

    /**
     * 处理业务异常({@link BusinessException})
     *
     * <p>
     * 【业务异常特点】
     * - 由 Service 层主动抛出
     * - 表示可预期的业务规则违反(如“用户名已存在”)
     * - 包含语义化的错误码(code)和用户友好消息(message)
     * </p>
     *
     * <p>
     * 【处理策略】
     * - 直接使用异常中的 code 和 message
     * - 返回 200 HTTP 状态码(因为这是“成功执行但业务失败”)
     * - 前端可根据 code 做差异化处理(如跳转、提示等)
     * </p>
     *
     * <p>
     * 【示例】
     * throw new BusinessException("USER_EXISTS", "用户名已存在");
     * → 返回:{ "code": "USER_EXISTS", "message": "用户名已存在", "data": null }
     * </p>
     *
     * @param e 捕获的业务异常实例
     * @return 标准化的失败响应
     */
    @ExceptionHandler(BusinessException.class)
    public ApiResponse<Void> handleBusinessException(BusinessException e) {
        // 直接使用异常中携带的错误码和消息
        return ApiResponse.fail(e.getCode(), e.getMessage());
    }

    /**
     * 处理 {@code @Valid} + {@code @RequestBody} 校验失败异常
     *
     * <p>
     * 【触发场景】
     * Controller 方法参数使用 {@code @Valid @RequestBody UserCreateDTO dto}
     * 且 DTO 中的字段校验失败(如 @NotBlank、@Email 等)
     * </p>
     *
     * <p>
     * 【异常结构】
     * - {@link MethodArgumentNotValidException#getBindingResult()} 包含所有校验错误
     * - 通常只取第一个错误(避免返回过多错误信息)
     * - {@link FieldError#getDefaultMessage()} 是校验注解中定义的消息
     * </p>
     *
     * <p>
     * 【处理策略】
     * - 错误码固定为 "VALIDATION_ERROR"
     * - 消息取第一个字段的校验失败提示
     * - 返回 200 HTTP 状态码(与业务异常一致)
     * </p>
     *
     * <p>
     * 【扩展建议】
     * 若需返回所有错误,可遍历 bindingResult.getAllErrors()
     * 但通常前端只需第一个错误即可
     * </p>
     *
     * @param e 参数校验异常
     * @return 标准化的校验失败响应
     */
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ApiResponse<Void> handleValidationException(MethodArgumentNotValidException e) {
        // 获取第一个校验错误(通常足够)
        FieldError fieldError = e.getBindingResult().getFieldError();
        // 若无错误(理论上不会发生),返回通用消息
        String message = fieldError != null ? fieldError.getDefaultMessage() : "请求参数校验失败";
        
        return ApiResponse.fail("VALIDATION_ERROR", message);
    }

    /**
     * 处理表单参数(application/x-www-form-urlencoded)校验失败异常
     *
     * <p>
     * 【触发场景】
     * - 使用表单提交(非 JSON)
     * - Controller 方法参数使用 {@code @Valid UserForm form}
     * - 表单字段校验失败
     * </p>
     *
     * <p>
     * 【与 MethodArgumentNotValidException 的区别】
     * - {@code MethodArgumentNotValidException}:用于 {@code @RequestBody}(JSON)
     * - {@code BindException}:用于普通表单参数(非 {@code @RequestBody})
     * </p>
     *
     * <p>
     * 【处理策略】
     * - 与 JSON 校验异常处理逻辑一致
     * - 统一返回 "VALIDATION_ERROR" 错误码
     * </p>
     *
     * @param e 表单绑定异常
     * @return 标准化的校验失败响应
     */
    @ExceptionHandler(BindException.class)
    public ApiResponse<Void> handleBindException(BindException e) {
        FieldError fieldError = e.getBindingResult().getFieldError();
        String message = fieldError != null ? fieldError.getDefaultMessage() : "表单参数校验失败";
        
        return ApiResponse.fail("VALIDATION_ERROR", message);
    }

    /**
     * 处理路径变量/请求参数校验失败异常(JSR-303)
     *
     * <p>
     * 【触发场景】
     * Controller 方法签名中直接对参数校验,例如:
     * {@code public User getUser(@PathVariable @Min(1) Long id)}
     * </p>
     *
     * <p>
     * 【异常特点】
     * - 抛出 {@link ConstraintViolationException}
     * - 错误信息在 {@code getConstraintViolations()} 集合中
     * </p>
     *
     * <p>
     * 【处理策略】
     * - 取第一个约束违反的错误消息
     * - 返回统一校验错误码
     * </p>
     *
     * @param e 约束违反异常
     * @return 标准化的校验失败响应
     */
    @ExceptionHandler(ConstraintViolationException.class)
    public ApiResponse<Void> handleConstraintViolationException(ConstraintViolationException e) {
        // 获取第一个约束违反的错误消息
        String message = e.getConstraintViolations().stream()
            .findFirst()
            .map(violation -> violation.getMessage())
            .orElse("请求参数格式错误");
            
        return ApiResponse.fail("VALIDATION_ERROR", message);
    }

    /**
     * 通用异常兜底处理(最后防线)
     *
     * <p>
     * 【捕获范围】
     * 所有未被上述处理器捕获的异常,包括:
     * - NullPointerException
     * - SQLException
     * - 自定义未分类异常
     * - 第三方库异常
     * </p>
     *
     * <p>
     * 【安全处理原则】
     * - **绝不**将 e.getMessage() 或 e.printStackTrace() 返回给前端!
     *   (可能包含数据库密码、文件路径等敏感信息)
     * - 返回通用友好提示:“系统繁忙,请稍后再试”
     * - **必须**在服务端记录完整堆栈(通过日志框架)
     * </p>
     *
     * <p>
     * 【日志记录建议】
     * 在实际项目中,此处应添加:
     * {@code log.error("系统异常", e);}
     * 并集成 ELK/Sentry 等监控系统
     * </p>
     *
     * <p>
     * 【HTTP 状态码】
     * 虽然返回 200(因 ApiResponse 统一包装),但可通过 code 区分
     * 前端应统一处理 "SYSTEM_ERROR" code
     * </p>
     *
     * @param e 任意未处理的异常
     * @return 通用系统错误响应
     */
    @ExceptionHandler(Exception.class)
    public ApiResponse<Void> handleException(Exception e) {
        // 【安全红线】生产环境禁止暴露异常细节!
        // 正确做法:记录日志(此处省略,实际项目必须添加)
        // log.error("未处理的系统异常", e);
        
        // 返回通用友好提示
        return ApiResponse.fail("SYSTEM_ERROR", "系统繁忙,请稍后再试");
    }
}

🔍 关键设计说明补充

1. 为什么所有异常都返回 HTTP 200?
  • 统一响应体设计:ApiResponse 已包含 code 字段区分成功/失败
  • 前端处理简化:无需处理 HTTP 4xx/5xx,统一解析 code
  • 符合 RESTful 争议实践:部分团队偏好 HTTP 状态码,但统一响应体更灵活

💡 若需返回真实 HTTP 状态码,可修改为:

return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ApiResponse.fail(...));
2. 异常处理顺序的重要性
// ❌ 错误:通用异常在前,会屏蔽所有具体异常
@ExceptionHandler(Exception.class)
public ApiResponse<?> handleAll(Exception e) { ... }

@ExceptionHandler(BusinessException.class) // 永远不会执行!
public ApiResponse<?> handleBusiness(BusinessException e) { ... }
3. 生产环境日志记录

在 handleException 中应添加:

private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);

@ExceptionHandler(Exception.class)
public ApiResponse<Void> handleException(Exception e) {
    // 生成唯一错误ID,便于追踪
    String errorId = UUID.randomUUID().toString();
    log.error("系统异常 [ID: {}]", errorId, e); // 记录完整堆栈
    
    return ApiResponse.fail("SYSTEM_ERROR", "系统繁忙,请稍后再试(错误ID: " + errorId + ")");
}
4. 前端错误处理建议
// axios 响应拦截器
axios.interceptors.response.use(
  response => {
    const { code, message, data } = response.data;
    if (code !== 200) {
      if (code === 'VALIDATION_ERROR') {
        ElMessage.warning(message);
      } else if (code === 'SYSTEM_ERROR') {
        ElMessage.error('系统错误,请联系管理员');
      } else {
        ElMessage.error(message);
      }
      return Promise.reject(new Error(message));
    }
    return data;
  }
);

✅ 此模板文件是 系统健壮性的最后防线,正确配置后可:

  • 提升 API 可用性(避免 500 错误)
  • 增强系统安全性(防止信息泄露)
  • 改善用户体验(友好错误提示)
  • 降低运维成本(结构化错误码)

可直接用于企业级项目,是高质量后端服务的必备组件。

从Gotham到Foundry:拆解Palantir三大产品线,看它如何用‘本体’统一企业数据与AI 本文深入解析Palantir的三大产品线Gotham、Foundry和Apollo,揭示其如何通过独特的'本体'架构实现企业数据与AI的无缝融合。从国防情报到商业决策,Palantir的产品架构展现了强大的数据整合与AI赋能能力,为企业构建数字孪生提供革命性解决方案。 阅读详情

相关推荐

PCL 均匀采样【2026最新版】

根据输入点云数据创建一个微小的三维立方体集合,然后计算每个三维立方体的重心;由于该重心点不一定是原始点云中的点,直接用该点来表示立方体内所有的点会丢失原始点云的细小特征;所以使用k最近邻搜索寻找距离重心点最近的原始点来代替重心点。

点云侠的博客 41万+

java ftl_.ftl文件 是什么文件 freemaker

freemarker的文件一般以后缀ftl,ftl文件的头上要写这样才能在ftl中使用webwork的tag。freemarker确实是不错的模版语言引擎,尤其是处理对象图很方便,处理xml也很方便,还支持xpath什么是FreeMarker?FreeMarker 是一个模版引擎,一个基于文本的模板输出工具(生成任意的HTML表单代码)。它是一个Java package,面向Java程序员的cla...

weixin_29071809的博客 969

机器人动力学仿真软件:Webots_(14).机器人声音仿真

Webots 中的声音仿真主要通过Sound和两种节点来实现。Sound节点用于播放预定义的音频文件,而节点则允许在仿真过程中动态生成和播放声音。这些节点可以用于模拟机器人的语音输出、报警声、环境噪音等。以下是一个示例,展示如何在控制器代码中播放预定义的声音。// 控制器代码(.c) # include <webots/robot.h> # include <webots/sound.h> # define TIME_STEP 64 const char * sound_name = "sound";

kkchenjj的博客 1311

java中freemarker使用ftl模版生成PDF文件

从jar中读取字体和ftl模版,如果你不想从jar中读取,可以自己改造一下,就是不管你是从其他地方读文件或者从数据库中字符串,总之你要把他转换成字符串

u010696176的博客 1万+

YOLO11,ultralytics-main源代码目录结构详解

本文详细介绍了YOLO11框架的ultralytics-main源代码目录结构,帮助用户更好地理解和使用YOLO模型。主要目录包括:docker文件夹,包含多种Docker镜像文件,适用于不同硬件环境;docs文件夹,存放YOLO的说明文档;examples文件夹,提供YOLO使用的示例代码;tests文件夹,包含单元测试模块;ultralytics文件夹,为核心代码所在,包含推理逻辑、配置、数据处理等模块。其中,engine文件夹负责训练和推理引擎,models文件夹存放模型架构,nn定义神经网络结构

qq_30279827的博客 1282

多模态轨迹预测:行人、车辆的交互式推理

多模态轨迹预测:行人、车辆的交互式推理 ,人工智能,计算机视觉,大模型,AI,本文围绕多模态轨迹预测中行人与车辆的交互式推理展开,介绍了其定义,即综合多种信息预测交通参与者未来多种轨迹。涵盖基础概念如轨迹表示、模态、交互关系,技术框架包括数据处理、特征提取、预测模型(物理、机器学习、深度学习模型等)及结果评估。还探讨了交互式推理方法、面临的不确定性处理等挑战、应用场景、未来发展方向、相关工具及实际案例,展现了该技术在智能交通等领域的重要性与发展潜力。​

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 14万+

java关于ftl模板生成html以及word(实现在线预览、编辑功能)

问题描述: 最早试过了xml模板生成word,虽然文件格式保留的多,但是这种模板生成的word转html,用单纯的poi中的XWPFDocument、HWPFDocument是有问题的,因为word本质上还是xml,xml转html,poi是暂时不支持的,而且,除了上述的问题外,xml模板的语言很少有java去学习,一旦涉及到模板的调整,一般都是花费很大力气都很难改成功的,基于上述的情况,我并没...

qq_16207635的博客 1万+

uniapp [安卓苹果App端] - 解决支付宝支付报错requestPayment:fail [payment支付宝:62009]未知错误,使用uni.requestPayment支付报错排查方案

uni-app支付宝,uniapp支付宝沙箱支付报错,uni.requestPayment,uniAPP App支付宝支付提示错误requestPayment:fail [payment支付宝:62009]未知错误,UNI-APP支付宝报错"code": -100,uniapp 解决安卓App使用uni.requestPayment实现沙箱环境支付宝支付报错,uniapp安卓app使用支付宝的沙箱环境支付时报了这个错,安卓端app支付宝支付,在沙箱测试环境测支付,提示“商家订单参数异常,请重新发起付款,选择

🏆 前端领域优质创作者 9609

FTL的使用及Maven整合项目

FTL即FreeMarker,是一款模板引擎,类似于Thymeleaf,都是通过传入的数据来对页面进行渲染,用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。

weixin_45266856的博客 1940

SAP BTP ABAP RAP 开发对象命名规范与落地实践

摘要:SAP BTP ABAP开发中的命名规范实践 在企业级ABAP开发中,命名规范是提升交付效率的工程化手段。SAP推荐采用[/<namespace>/][<prefix>]_<object_name>_[<suffix>]的结构化命名框架,解决多对象、多团队的协同问题。关键实践包括:使用组织专属命名空间避免冲突;通过prefix区分同类型对象的不同语义(如UI_/API_);object_name体现业务语义而非技术细节;suffix表达次级差异。在具体对

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1431

基于Harness Engineering构建AI Agent的全自动化CI_CD流水线

AI Agent的CI/CD是指对Agent的全生命周期资产(代码、Prompt、RAG知识库、模型权重、工具配置)进行持续集成、持续测试、持续发布和持续观测的自动化流程,核心目标是在保障发布质量的前提下,最大化提升Agent的迭代效率。

AI云原生与云计算技术学院 622

Java使用ftl模板文件生成Word,以及Word转换图片或Pdf工具类

最近在项目中使用打印功能,发现这个功能我已经写过多次了,下面这个文章的发步日期在2020年,不得不感慨时间之快啊。下面介绍一下应用场景:这次项目依旧是springboot项目,使用ftl模版生成的word文件。比上一版相比更加灵活而且实用性更高,还可插入base64图片进行展示关于ftl模板我会简单介绍一下使用的心得,其实也是一些标签而已,熟悉以后操作起来也比较快下载。

焦糖橙子 8799

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

.ftl文件 是什么文件

1、Freemarker模板的文件后缀名 2、Freemarker其实是一种比较简单的网页展示技术,说白了就是网页模板和数据模型的结合体。这种结合模式的好处就是,分离了网页界面设计人员和编程人员的工作,让他们各司其职。 据个人理解,Freemarker大致的工作方式是,网页模板里面嵌入了数据模型中的数据、Freemarker自定义流程控制语言、Freemarker自定义的操作函数等等,

小Y 9万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

java 将ftl文件作为模板导出word文档

一、word文档 1、在Word中编辑好word模板,变量部分用el表达式替代 2、另存为xml文件(2003),打开xml文件,讲 sellerName等改为el表达式:${sellerName!}等,然后将.xml文件后缀改为.ftl,把.ftl模板文件到项目制定目录。加载jar包freemarker.jar然后开始后端代码二、后台主要代码import java.io.File; imp...

最爱桃子的阿狸 1万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

java生成FTL文件

java生成FTL文件核心代码: String path = ServletActionContext.getServletContext().getRealPath("/cms"); String templateName = DateUtil.convertDate(new Date(), "").replaceAll("-", "").replaceAll(":", "").

wf_kingofring的专栏 5231

.ftl文件简介及语法

1、Freemarker模板的文件后缀名 2、Freemarker其实是一种比较简单的网页展示技术,说白了就是网页模板和数据模型的结合体。这种结合模式的好处就是,分离了网页界面设计人员和编程人员的工作,让他们各司其职。 据个人理解,Freemarker大致的工作方式是,网页模板里面嵌入了数据模型中的数据、Freemarker自定义流程控制语言、Freemarker自定义的操作函数等等,在装载网页

泡沫水灵灵的博客 7万+

Spring AI + GPT-5.5 + Ollama 配置教程:Base URL、超时与流式调用

由于不同 Spring AI、Spring Boot 小版本之间仍可能存在差异,创建项目时应检查 Spring Initializr、Spring AI BOM 和官方兼容矩阵,不要直接复制旧教程中的 Starter 名称和版本号。多人项目最好隔离不同客户端,并在脱敏前提下记录最终 URL、状态码、请求耗时、请求 ID 和模型 ID。Spring AI 接入模型 API,至少要同时确认 Starter、Base URL、请求路径、API Key、模型 ID、连接超时、读取超时和流式客户端这 8 项。

2601_95893075的博客 215

V8 机制、手写核心函数与 TypeScript 类型体操

或固定初始化(如数组先定长、对象先给全字段)保持类型与形状稳定;这些都比"换框架"更基础。只能处理纯数据(丢函数、Date、RegExp、循环引用报错)。生产级深拷贝要处理:原始值短路、循环引用、V8(Chrome / Node 的 JS 引擎)不是"解释一行跑一行"那么简单,它用。图:V8 执行流程——解释执行 + 热点优化,优化失败会 Deopt 回退。JS 内存自动管理,但"自动"不等于"不会漏"。是"固定间隔最多执行一次"。手写 Promise 是"懂异步"的试金石。是"停下后才执行最后一次",

qq_38468358的博客 325

【JVM】对象内存布局

HotSpot JVM 中,Java 对象内存布局由对象头(12字节,含Mark Word与压缩Klass Pointer)、实例数据及对齐填充构成,总大小为8字节倍数。对象头支持锁状态动态复用,指针压缩使引用仅4字节,但堆超32GB时失效。实例字段按类型优先级重排序以减少间隙,最小对象大小为16字节。通过JOL工具可精准验证布局,理解锁机制、GC、伪共享等底层行为。

2301_79732484的博客 140

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

要努力去发光,而不是被照亮~ 112

Spring Boot 数据源与 MyBatis(-Plus) 自定义配置详解

本文详解 Spring Boot 中单数据源环境下 HikariCP 与 MyBatis-Plus 的自定义配置。通过手动声明 SqlSessionFactory,实现下划线转驼峰、日志输出、一级缓存策略等精细化控制。结合 HikariCP 核心参数调优(如最大连接数、连接生命周期),确保高性能与稳定性。适用于仅需访问单一数据库的场景,避免多数据源复杂性,兼顾性能与可维护性。

BADAO_LIUMANG_QIZHI的博客 190

LeetCode Hot 100 二叉树专题(二)3 题(Java)

本篇文章共 3 题:543. 二叉树的直径、102. 二叉树的层序遍历、108. 将有序数组转换为二叉搜索树。 每道题都统一按「① 题目分析 & 解题思路 → ② 常见解法(附代码)及讲解 → ③ 知识点总结」的顺序组织;代码使用 Java 编写,节点定义沿用 LeetCode 默认的 TreeNode。

2401_88612756的博客 352

Decorator

TaskDecorator 是异步场景下"跨线程传递上下文"的标准方案,主要用于传递 MDC、用户信息、数据源路由等上下文数据,核心价值是让异步任务的日志链路不中断、业务上下文不丢失。TaskDecorator 是 Spring 提供的一个钩子接口,用于在异步任务执行前对 Runnable 进行包装,常用于跨线程传递上下文。如果你在项目中遇到具体的异步上下文传递问题,可以把代码贴出来,我帮你给出最合适的 Decorator 方案 👍。✅ 核心能力:在线程切换时,把"父线程的上下文"搬到"子线程"

wlwork66的博客 102

JDK 下载安装:装完 Java 提示「不是内部或外部命令」?环境变量没配

JDK 是写 Java 程序必须装的东西。它包含运行 Java 的虚拟机(JRE)和编译 Java 的编译器(javac)——装了它,能跑、.java文件能编译成可执行程序。免费,学习和小规模生产都不花钱。

科小怪的博客 608

数据库乐观锁深度解析:MySQL、PostgreSQL 实战 + Spring Boot 集成指南

Oracle 提供了ORA_ROWSCN伪列(System Change Number),记录最后修改行的 SCN,类似 PostgreSQL 的xmin。实践中通常仍使用 version 字段方案,逻辑与 MySQL 完全相同。-- Oracle:通过 ORA_ROWSCN 实现乐观锁-- 更新时比对 SCN// 自定义注解// AOP 切面@Aspect@Component@Slf4jtry {

yjc_1111的专栏 392

C++ 多态详解:作用、原理与实战用法

多态是C++面向对象的核心特性,通过虚函数实现运行期动态绑定,使同一接口在不同对象上表现出不同行为。其核心作用包括统一接口、提升可扩展性、降低耦合、支持运行时分派与批量处理。实现依赖虚函数表(vtable)和虚指针(vptr),需注意虚析构函数、对象切片等陷阱。相比编译期多态(模板),运行期多态灵活性高但有调用开销。合理结合两者,可兼顾代码的灵活性与性能,是构建可扩展、低耦合系统的关键。

2402_85743155的博客 369
上一篇: mybatis-plus-config.java.ftl 模板文件参考示例
下一篇: 使用 @Mapper 注解后是否还需要 @MapperScan 注解吗?
龙茶清欢
博客等级 码龄7年 3720粉丝 375原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

龙茶清欢

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

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

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

打赏作者

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

抵扣说明:

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

余额充值