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

Linux——进程控制

无标题

HttpMessageConverter接口可以将请求协议转换为Java对象,也可以把Java对象转换为响应协议。

对于程序员来说,springmvc已经帮我们写好了,我们只需要在不同的业务场景下,选择合适的HTTP消息转换器即可。

我们可以使用不同的注解来启用不同的消息转换器。

@ResponseBody

这里使用的消息转换器是:StringHttpMessageConverter

@GetMapping("/ajax")

// @ResponseBody注解表示该方法的返回值直接作为字符串响应体返回,而不是视图名称

@ResponseBody

public String ajax() {

return "hello ajax";

}

直接返回Java对象,(这里使用的消息转换器是MappingJackson2HttpMessageConverter):

@GetMapping("/ajax2")

// @ResponseBody注解表示该方法的返回值直接作为响应体返回,而不是视图名称

@ResponseBody

public User ajax2() {

return new User("zhangsan", 20, "123456");

}

此时要加入jackson-databind依赖才能生效

<!-- 负责将Java对象转换为JSON格式,或者将JSON格式的数据转换为Java对象。

它提供了丰富的功能和灵活的配置选项,使得在Java应用程序中处理JSON数据变得非常方便。-->

<dependency>

<groupId>com.fasterxml.jackson.core</groupId>

<artifactId>jackson-databind</artifactId>

<version>2.20.2</version>

</dependency>

</dependencies>

@RestController

标注在类上,等于@Controller+@ResponseBody

@RequestBody

作用是直接将请求体传递给Java程序,程序中可以直接使用一个String类型的变量来接收。

此注解只能出现在方法的参数上。

使用的消息转换器是FormHttpMessageConverter

@PostMapping("/ajax3")

public String ajax3(@RequestBody String params) {

System.out.println(params);

return "hello ajax3";

}

如果前端请求体当中提交的数据是JSON格式,那么@RequestBody可以将提交的json格式的字符串转换成Java对象。同样需要使用jackson的依赖

@PostMapping("/ajax4")

@ResponseBody

public String ajax4(@RequestBody User user) {

System.out.println(user);

return "hello ajax4";

}

RequestEntity类

RequestEntity类的实例封装了整个请求的协议:包括请求行、请求头、请求体的所有信息。

出现在控制器方法的参数上:

@PostMapping("/ajax5")

@ResponseBody

public String ajax5(RequestEntity<User> requestEntity) {

// 请求方式

HttpMethod method = requestEntity.getMethod();

// 请求体

User user = requestEntity.getBody();

// 请求头

HttpHeaders headers = requestEntity.getHeaders();

// 请求URL

requestEntity.getUrl();

// 请求头中的Content-Type

headers.getContentType();

return "hello ajax5";

}

ResponseEntity类

ResponseEntity类的实例可与封装响应协议,包括状态行、响应头、响应体。如果你想定制属于自己的响应协议,可以使用该类。注意:返回值必须是ResponseEntity,泛型为什么是User。因为响应体的内容是User类型。

比如:

@GetMapping("ajax6/{id}")

public ResponseEntity<User> ajax6(@PathVariable("id") String id) {

User user =userService.getUserById(id);

if (user == null) {

return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);

}else{

return ResponseEntity.ok(user);

}

}

文件上传与下载

文件上传

添加以下依赖(SpringMVC6不需要添加依赖):

<dependency>

<groupId>commons-fileupload</groupId>

<artifactId>commons-fileupload</artifactId>

<version>1.5</version>

</dependency>

文件上传必须是post请求

文件上传呢的form标签中必须使用enctype="multipart/form-data"

enctype是用来设置请求头的,默认是application/x-www-form-urlencoded

<!-- 前端控制器-->

<servlet>

<servlet-name>springmvc</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<init-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:springmvc.xml</param-value>

</init-param>

<load-on-startup>0</load-on-startup>

<multipart-config>

<!-- 设置单个文件的最大大小,单位为字节。超过这个大小的文件将被拒绝上传。-->

<max-file-size>102400</max-file-size>

<!-- 设置整个表单的最大大小,单位为字节。这个值包括所有文件和表单数据的总和。超过这个大小的请求将被拒绝。-->

<max-request-size>1024000</max-request-size>

<!-- 设置最小的文件大小,单位为字节。小于这个大小的文件将被拒绝上传。-->

<file-size-threshold>0</file-size-threshold>

</multipart-config>

</servlet>

重点:在web.xml文件中DispatcherServlet配置时,添加multipart-config配置信息。(这是spring6的配置,如果是以前的版本。则不是这样配置)

前端代码:

<form th:action="@{/file-upload}" method="post" enctype="multipart/form-data">

<input type="file" name="file"/>

<button type="submit">上传</button>

</form>

后端代码:

@PostMapping("/file-upload")

public String file(@RequestParam("file") MultipartFile file) throws IOException {

// 获取参数名

String name = file.getName();

// 获取文件大小

long size = file.getSize();

// 获取文件类型

String contentType = file.getContentType();

// 获取原始文件名

String originalFilename = file.getOriginalFilename();

// 获取文件输入流

InputStream inputStream = file.getInputStream();

// 创建一个缓冲输入流对象,用于读取文件内容

BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);

// 创建一个新的文件名,使用当前时间戳加上原始文件的扩展名

String newName = System.currentTimeMillis() + originalFilename.substring(originalFilename.lastIndexOf("."));

String path = "D:/" + newName;

// 创建一个缓冲输出流对象,用于将文件内容写入到指定路径

File file1 = new File(path);

BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(

new FileOutputStream(file1)

);

byte[] bytes = new byte[1024];

int length = 0;

// 循环读取文件内容,并将其写入到指定路径

while ((length = bufferedInputStream.read(bytes)) != -1) {

bufferedOutputStream.write(bytes, 0, length);

}

bufferedOutputStream.flush();

// 关闭输入流和输出流

bufferedInputStream.close();

bufferedOutputStream.close();

return "ok";

http://www.jsqmd.com/news/421243/

相关文章:

  • 干货拉满!Web 安全入门超全讲解,小白也能轻松入门到精通
  • 2026 智能咖啡机哪家值得信赖?选购指南与机型推荐 - 品牌2025
  • 2026年全国镀锌钢管靠谱厂家选型参考 靠谱耐用适配多行业 - 深度智识库
  • MXNet模型训练超高效
  • 第17届计算智能与软件工程国际研讨会(CISE-D 2026)
  • CMake优化等级介绍
  • 【连续2届检索、高录用、快见刊】第三届应用经济学、管理科学与社会发展国际学术会议 (AEMSS 2026)
  • 2026年2月铝瓦鸿板生产厂家,屋面铝瓦定制实力工厂推荐 - 品牌鉴赏师
  • 2026 年企业级私有化部署优质厂商:知识库部署服务商、AI 知识库方案商、Deepseek 知识库服务商、智能 BI 部署、BI 本地私有化厂商全汇总 - 品牌2025
  • 短信接口哪家稳定?深度解析短信发送接口的 3 个核心指标 - Qqinqin
  • 2026年2月金属复合板制造商推荐,跨平台与售后体系实用指南 - 品牌鉴赏师
  • 2026年长垣玺摄影:河南专业婚纱摄影公司推荐榜,婚纱照婚纱摄影婚纱礼服拍婚纱照选婚纱摄影 - 海棠依旧大
  • Doris –部署–理论
  • 分析上海劳动纠纷法律专业咨询费用,哪家收费合理 - 工业推荐榜
  • MAC 安装 homebrew 国内镜像
  • 2026年口碑好的美陈设计制作品牌企业,兰州顶点公关值得关注 - 工业推荐榜
  • 北京陌上造园:专注京津冀高端庭院与商业空间的整体设计与营造、秉持以心造境 以工筑恒的造园理念,以自有的匠人施工团队,结合精心适配本地气候的植物配置,为您打造专属的理想园居生活 - 海棠依旧大
  • 分析知名的港澳留学服务公司,圆梦未来性价比高不高? - myqiye
  • 2026年湖北武汉工伤维权与工伤赔偿律师服务团队推荐指南 - 2026年企业推荐榜
  • 企业办公选购指南:2026 会议室智能咖啡机推荐 - 品牌2025
  • 四川暖通厂家推荐:地暖安装全科普,石墨烯/水/电地暖厂家解析 - 深度智识库
  • 纸飞机主题乐园团队活动适合不,南通无锡靠谱品牌推荐 - 工业品网
  • Jmeter — 参数化
  • 春节复工福利就位!天翼云息壤2500万Tokens免费送,全品类大模型一键畅玩!
  • 一键出杯免维护优选:2026 商务接待区智能咖啡机推荐 - 品牌2025
  • 提升办公体验:2026 大型企业办公室智能咖啡机推荐 - 品牌2025
  • 工业级设计揭秘:迅为RK3576如何保证-40℃到85℃稳定运行?
  • 分析2026年视唱练耳教材推荐,专业选择有妙招 - mypinpai
  • 2026年正规的玻镁岩棉手工板,岩棉净化板,岩棉手工板厂家选购推荐指南 - 品牌鉴赏师
  • 沪尚律所提供婚姻家庭律师一对一咨询价格贵不贵? - 工业设备