找公司网站建设,蚌埠公司注册,免费个人网站怎么建立,网站建设与设计教程目录 Controller统一异常处理
url解析
static下静态资源文件的访问
配置类
如何访问static下的资源文件
yaml基础语法
注解赋值
批量注入
单个注入 Controller统一异常处理 Controller统一异常处理ControllerAdvice#xff1a;统一为Controller进行增强
…目录 Controller统一异常处理
url解析
static下静态资源文件的访问
配置类
如何访问static下的资源文件
yaml基础语法
注解赋值
批量注入
单个注入 Controller统一异常处理 Controller统一异常处理ControllerAdvice统一为Controller进行增强
ExceptionHandler : 异常处理 Controller 统一异常处理 对参数绑定异常的异常统一处理。 存在的原因不想以异常堆栈的形式显示给用户当多个线程访问这个方法时就会造成大量的代码冗余采用统一异常的形式来显示给用户。 ResponseBody以JSON的格式返回给浏览器。 优化前。优化后见本文代码片段2 RequestMapping(/vali)ResponseBodypublic String dovali(Valid Dog dog, BindingResult result){//获取错误结果个数int count result.getErrorCount();//判断if (count0){ListFieldError fieldErrors result.getFieldErrors();for (int i 0; i fieldErrors.size(); i) {FieldError fieldError fieldErrors.get(i);System.out.println(fieldError.getField());System.out.println(fieldError.getRejectedValue());System.out.println(fieldError.getDefaultMessage());}return 失败;}else{System.out.println(dog);return 成功;}} 代码片段1 缺点可能会造成异常来源不清晰。 代码流程 1.实体类数据校验 2.在url路径里面传来的参数的key是对的但是参数格式不对email格式不对。 比如,url路径为 http://localhost:8081/demo01/exercise?namesummeremail283 url解析
参数配置位置在application.yml url1 参数绑定1
数据校验部分参数校验关键字valid和notnull和email的校验 url2 url3
包名 import org.springframework.web.bind.annotation.ExceptionHandler; package com.apesource.springboot_init_01.util;import org.springframework.validation.BindException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
ControllerAdvice
public class BindExceptionUtilAdvice {ExceptionHandler(BindException.class)ResponseBodypublic String handlerexception(BindException bindException){// System.out.println(bindException.getMessage());return 全局异常处理器成功;}
}代码片段2 参数绑定2 参数绑定另一形式在需要数据校验的类上面写注解Validated Validated
public class Person {
NotNull(message 用户名不能为空)private String name;private String lastName;NotNull(message 年龄不能为空)Max(value 130,message 够了机会还是要留给年轻人的)private int age;private boolean marry;private Date birth;private MapString,Object maps;private ListObject lists;private Dog dog;代码片段3 Static下静态资源文件的访问 在enjoy和spring的整合下就会涉及到static下静态资源文件的访问加载enjoy模版引擎之后就会要去加载一个视图文件 配置类 加载视图文件需要配置类。在Usercontroller接受到请求之后就会找到对应的方法执行完方法的逻辑之后这个时候拦截器由于SpringBootconfig,就会返回界面。没有SpringBootconfig就得不到xx.html。 package com.apesource.springboot_web_01.config;import com.jfinal.template.Engine;
import com.jfinal.template.ext.spring.JFinalViewResolver;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** version 1.0* Author* since 2023/4/11*/
Configuration
public class SpringBootConfig {Bean(name jfinalViewResolver)public JFinalViewResolver getJFinalViewResolver() {// 创建用于整合 spring boot 的 ViewResolver 扩展对象JFinalViewResolver jfr new JFinalViewResolver();// 对 spring boot 进行配置jfr.setSuffix(.html);jfr.setContentType(text/html;charsetUTF-8);jfr.setOrder(0);// 设置在模板中可通过 #(session.value) 访问 session 中的数据jfr.setSessionInView(true);// 获取 engine 对象对 enjoy 模板引擎进行配置配置方式与前面章节完全一样Engine engine JFinalViewResolver.engine;// 热加载配置能对后续配置产生影响需要放在最前面engine.setDevMode(true);// 使用 ClassPathSourceFactory 从 class path 与 jar 包中加载模板文件engine.setToClassPathSourceFactory();// 在使用 ClassPathSourceFactory 时要使用 setBaseTemplatePath// 代替 jfr.setPrefix(/view/)engine.setBaseTemplatePath(/templates/);// 更多配置与前面章节完全一样// engine.addDirective(...)// engine.addSharedMethod(...);return jfr;}
}代码片段4 如何访问static下的资源文件 1.只要静态资源放在类路径下/static、/public、/resources、/META-INF/resources可以被直 接访问-对应文件WebProperties.java源码 private static final String[] CLASSPATH_RESOURCE_LOCATIONS{classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/}; 2.常见静态资源JS、CSS、图片(.jpg .png .gif .bmp .svg)、字体文件(Fonts)等 3.访问方式默认项目根路径/静态资源名 比如 http://localhost:8080/hi.jpg 原文链接https://blog.csdn.net/weixin_49764008/article/details/128668539s 顺带说一下因为在WEB_INF下的资源文件有安全访问限制所以不可以直接通过url访问这些资源文件只可以通过在controller中的方法返回的网页的前缀名String访问这些资源文件。 位置:application.yml spring.mvc.static-path-pattern/prefix/** 语句1未加语句1之前 http://localhost:8080/1.jpg加之后 http://localhost:8080/prefix/1.jg Yaml基础语法 数组 commpany: [xxx,xxxx,xxxx] address: - beijing - shanghai 对象/map person: name: wangzhuo # 行内写法 person: {name: wangzhuo} 对象数组 users2 : [ { name : Tom , age : 4 },{ name : Jerry , age : 5 } ] YAML 参数引用 name : wangzhuo person : pet : $ { name } 注解赋值
批量注入 ConfigurationProperties prefix person1 匹配 PropertySource ( value classpath:dog.yml )中前缀名为person1的格式和内容。 支持复杂类型 单个注入 Value 不支持复杂类型 Value(${lists}) ListString lists; 如果复杂类型有了value注解就会导致参数绑定异常 在xml中的应用表单 form action/one/show4 methodpost员工编号:input typetext nameeid br/员工姓名:input typetext nameename br/员工性别:input typetext nameesex br/部门编号:input typetext namedept.did br/部门名称:input typetext namedept.dname br/input typesubmit value发送请求4/
/form 员工编号1:input typetext namemylist[0].eid br/
员工姓名1:input typetext namemylist[0].ename br/
员工性别1:input typetext namemylist[0].esex br/
员工编号2:input typetext namemylist[1].eid br/
员工姓名2:input typetext namemylist[1].ename br/
员工性别2:input typetext namemylist[1].esex br/
给Listemp当中传入两个对象员工编号3:input typetext namemyMap[one].eid br/
员工姓名3:input typetext namemyMap[one].ename br/
员工性别3:input typetext namemyMap[one].esex br/
员工编号4:input typetext namemyMap[two].eid br/
员工姓名4:input typetext namemyMap[two].ename br/
员工性别4:input typetext namemyMap[two].esex br/map的key为中括号当中的内容value为用户输入的内容
form action/one/map methodpost员工编号:input typetext namexxxbr/员工姓名:input typetext nameyyybr/员工性别:input typetext namezzzbr/input typesubmit value发送请求4(map)/
/form以map接收key为name,value为用户输入的内容