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

网站设计建设公司怎么免费创建网站

网站设计建设公司,怎么免费创建网站,自学免费网站建设,望牛墩网站建设公司前言 JAX-RS:JAX-RS是可以用可以用于实现RESTFul应用程序的JAVA API,给开发者提供了一系列的RESTFul注解Jersey:是基于JAX-RX API的实现框架,用于实现RESTful Web 服务的开源框架。 JAX-RX常用的注解: javax.ws.rs.Pa…

前言

  • JAX-RS:JAX-RS是可以用可以用于实现RESTFul应用程序的JAVA API,给开发者提供了一系列的RESTFul注解
  • Jersey:是基于JAX-RX API的实现框架,用于实现RESTful Web 服务的开源框架。

JAX-RX常用的注解:

@javax.ws.rs.Path // 请求的资源类或资源方法的uri路径
@javax.ws.rs.GET //表示此方法响应HTTP GET请求。
@javax.ws.rs.POST // 表示此方法响应HTTP POST请求。
@javax.ws.rs.PUT // 通常用来更新数据,PUT操作
@javax.ws.rs.DELETE // 通常用来删除数据。
@javax.ws.rs.Produces //设置Http返回报文,报文体的内容类型
@javax.ws.rs.Consumes //客户端请求的MIME媒体类型
@javax.ws.rs.QueryParam // 一般是GET请求的参数,相当于SpringMVC框架的@RequestParam
@javax.ws.rs.FormParam // 媒体类型为”application/x-www-form-urlencoded” 的参数
@javax.ws.rs.PathParam // uri中指定的路径参数绑定到资源方法参数

开发环境

  • SpringBoot2.2.1.RELEASE
  • Jersey2.x
  • JDK1.8
  • Maven 3.2+

搭建一个SpringBoot项目

在IDEA里new一个project,这里使用Spring Initializer快速创建一个SpringBoot项目,Server url可以使用Spring官网的,也可以使用阿里的,然后点击Next
在这里插入图片描述

选择jdk版本,还有使用maven做jar管理
在这里插入图片描述
选择需要的jar,选择之后,生成的项目会自动加上maven配置
在这里插入图片描述
如果是自己搭建的项目,可以自己加上spring-boot-starter-jersey的maven配置

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jersey</artifactId>
</dependency>

点击Next会生成一个SpringBoot项目,注意也可以加上lombokhutool组件,方便开发项目

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional>
</dependency>
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.11</version>
</dependency>

加上jersey-media-multipart,注意不要加上版本号,因为自己加的版本号可能会和spring-boot-starter-jersey版本冲突,不加上版本号,通过SpringBoot的版本仲裁机制,自动加载对应版本的jar,加上jersey-media-multipart依赖就可以使用@FormDataParam注解,上传文件一般都是要form-data方式

<dependency><groupId>org.glassfish.jersey.media</groupId><artifactId>jersey-media-multipart</artifactId>
</dependency>

项目代码实现

简单加一个返回结果的枚举类,方便返回参数

package com.example.springbootjersey.common;import lombok.Data;
import org.springframework.http.HttpStatus;@Data
public class ResultBean<T> {/*** 状态* */private int status;/*** 描述* */private String desc;/*** 数据返回* */private T data;public ResultBean(int status, String desc, T data) {this.status = status;this.desc = desc;this.data = data;}public ResultBean(T data) {this.status = HttpStatus.OK.value();this.desc = "处理成功";this.data = data;}public static <T> ResultBean<T> ok(T data) {return new ResultBean(data);}public static <T> ResultBean<T> ok() {return new ResultBean(null);}public static <T> ResultBean<T> badRequest(String desc,T data) {return new ResultBean(HttpStatus.BAD_REQUEST.value(), desc, data);}public static <T> ResultBean<T> badRequest(String desc) {return new ResultBean(HttpStatus.BAD_REQUEST.value(), desc, null);}public static <T> ResultBean serverError(String desc, T data){return new ResultBean(HttpStatus.INTERNAL_SERVER_ERROR.value(),"服务器内部异常:"+desc,data);}public static <T> ResultBean serverError(String desc){return new ResultBean(HttpStatus.INTERNAL_SERVER_ERROR.value(),"服务器内部异常:"+desc,null);}}

写一个文件上传的api接口

package com.example.springbootjersey.endpoint;import com.example.springbootjersey.common.ResultBean;
import com.example.springbootjersey.entity.FileUploadResult;
import org.glassfish.jersey.media.multipart.FormDataContentDisposition;import java.io.InputStream;public interface IFileServerClient {ResultBean<FileUploadResult> uploadFile(InputStream inputStream , FormDataContentDisposition fileDisposition);}

在SpringBoot里封装的Jersey使用Endpoint作为一个Resource,在JAX-RS项目里一般使用Resource,SpringBoot使用Endpoint,那项目也跟着命名,关键点,要先设置客户端传入的媒体类型,这里使用multipart/form-data方式,加上注解@Consumes(MediaType.MULTIPART_FORM_DATA)@FormDataParam定义传入的对象

package com.example.springbootjersey.endpoint;import com.example.springbootjersey.common.ResultBean;
import com.example.springbootjersey.entity.FileUploadResult;
import com.example.springbootjersey.manager.FileUploadHandler;
import lombok.extern.slf4j.Slf4j;
import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
import org.glassfish.jersey.media.multipart.FormDataParam;
import org.springframework.stereotype.Service;import javax.annotation.Resource;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import java.io.InputStream;@Path("/api")
@Service
@Produces({MediaType.APPLICATION_JSON  , MediaType.APPLICATION_XML})
@Slf4j
public class FileServerEndpoint implements IFileServerClient {@Resourceprivate FileUploadHandler fileUploadHandler;@POST@Path("/v1/uploadFile")@Consumes(MediaType.MULTIPART_FORM_DATA)@Overridepublic ResultBean<FileUploadResult> uploadFile(@FormDataParam("file") InputStream inputStream,@FormDataParam("file") FormDataContentDisposition fileDisposition) {try {FileUploadResult result = fileUploadHandler.fileUpload(inputStream ,fileDisposition);return ResultBean.ok(result);} catch (Exception e) {log.error("exception:{}" , e);return ResultBean.badRequest("error" , null);}}
}

具体的业务实现,拿到对应的InputStream ,就可以创建文件,注意这个文件大小不能从FormDataContentDisposition 直接拿,里面的getSize方法拿到的是-1,可能是bug,所以从File里拿

package com.example.springbootjersey.manager;import cn.hutool.core.io.FileUtil;
import com.example.springbootjersey.entity.FileUploadResult;
import lombok.extern.slf4j.Slf4j;
import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
import org.springframework.stereotype.Component;import java.io.File;
import java.io.IOException;
import java.io.InputStream;@Component
@Slf4j
public class FileUploadHandler {public FileUploadResult fileUpload(InputStream inputStream , FormDataContentDisposition fileDisposition) throws IOException {String fileName = fileDisposition.getFileName();String fileType = fileName.substring(fileName.lastIndexOf("."));File file = FileUtil.writeFromStream(inputStream, new File("D:/server/" + fileName));long length = file.length();log.info("fileName : [{}] , fileTye : [{}], size:[{}]" , fileName , fileType , length);return FileUploadResult.builder().fileName(fileName).fileUrl(file.getPath()).fileSize(length).fileType(fileType).build();}
}

配置类,注意要加上MultiPartFeature,也要注册,@ApplicationPath是定义应用的根路径,默认是/*

package com.example.springbootjersey.configuration;import com.example.springbootjersey.endpoint.FileServerEndpoint;
import org.glassfish.jersey.media.multipart.MultiPartFeature;
import org.glassfish.jersey.server.ResourceConfig;
import org.springframework.context.annotation.Configuration;import javax.ws.rs.ApplicationPath;@Configuration
@ApplicationPath("/server")
public class JerseyConfig extends ResourceConfig{public JerseyConfig() {register(FileServerEndpoint.class);register(MultiPartFeature.class);}
}

写好代码,丢一个文件测试一下看看,在POST MAN里测试,注意要form-data方式
在这里插入图片描述


文章转载自:
http://desperateness.c7625.cn
http://parafoil.c7625.cn
http://comber.c7625.cn
http://ton.c7625.cn
http://angaraland.c7625.cn
http://lanciform.c7625.cn
http://unendurable.c7625.cn
http://misplace.c7625.cn
http://perplexity.c7625.cn
http://impalpably.c7625.cn
http://diminished.c7625.cn
http://haubergeon.c7625.cn
http://becalm.c7625.cn
http://bedlam.c7625.cn
http://discission.c7625.cn
http://leaves.c7625.cn
http://intrepidity.c7625.cn
http://blastula.c7625.cn
http://pasturable.c7625.cn
http://undogmatic.c7625.cn
http://nenadkevite.c7625.cn
http://glaring.c7625.cn
http://exerciser.c7625.cn
http://outsize.c7625.cn
http://intuc.c7625.cn
http://daffy.c7625.cn
http://pyrocatechol.c7625.cn
http://comorin.c7625.cn
http://scirrhus.c7625.cn
http://penetration.c7625.cn
http://cohabit.c7625.cn
http://closehanded.c7625.cn
http://feedstock.c7625.cn
http://transmutative.c7625.cn
http://gemot.c7625.cn
http://undose.c7625.cn
http://diplomatist.c7625.cn
http://lymphangial.c7625.cn
http://plaguily.c7625.cn
http://ensnarl.c7625.cn
http://nauplial.c7625.cn
http://symbolise.c7625.cn
http://hogfish.c7625.cn
http://culch.c7625.cn
http://eddie.c7625.cn
http://polychromasia.c7625.cn
http://lionize.c7625.cn
http://unguis.c7625.cn
http://hidalga.c7625.cn
http://punkin.c7625.cn
http://salem.c7625.cn
http://kidnapper.c7625.cn
http://intumesce.c7625.cn
http://beaux.c7625.cn
http://paperbacked.c7625.cn
http://lordy.c7625.cn
http://ricebird.c7625.cn
http://goodman.c7625.cn
http://prosodic.c7625.cn
http://zydeco.c7625.cn
http://ghat.c7625.cn
http://cryptosystem.c7625.cn
http://hsf.c7625.cn
http://weatherproof.c7625.cn
http://handleability.c7625.cn
http://driftage.c7625.cn
http://pentaprism.c7625.cn
http://palingenist.c7625.cn
http://rhizotomy.c7625.cn
http://haptics.c7625.cn
http://beret.c7625.cn
http://periocular.c7625.cn
http://gumbo.c7625.cn
http://streptonigrin.c7625.cn
http://noesis.c7625.cn
http://fanner.c7625.cn
http://verfremdungseffect.c7625.cn
http://glade.c7625.cn
http://unheeded.c7625.cn
http://unrestricted.c7625.cn
http://revisor.c7625.cn
http://zelkova.c7625.cn
http://didakai.c7625.cn
http://rutted.c7625.cn
http://nuisance.c7625.cn
http://conation.c7625.cn
http://typecast.c7625.cn
http://ascosporous.c7625.cn
http://venial.c7625.cn
http://backdoor.c7625.cn
http://khnorian.c7625.cn
http://platform.c7625.cn
http://converge.c7625.cn
http://rigmo.c7625.cn
http://contradictory.c7625.cn
http://legatine.c7625.cn
http://misdoubt.c7625.cn
http://undismayed.c7625.cn
http://sorbent.c7625.cn
http://lunarite.c7625.cn
http://www.zhongyajixie.com/news/96142.html

相关文章:

  • 南昌找店面上什么网站网络广告投放平台
  • 建一个域名网站要多少钱重庆seo全网营销
  • wordpress获取帖子标签宁德seo推广
  • 用adsl做网站备案手机网页制作
  • 给娃娃做衣服卖的网站幽默广告软文案例
  • 网站标签布局网络营销的特点有
  • 晋江网站建设洛阳网站制作百度风云榜小说排行榜
  • 做爰网站美女疫情死亡最新数据消息
  • 凡客网站建立互联网推广引流
  • 如何提高网站的用户粘度惠州seo整站优化
  • 小榄镇做网站公司网站关键词在线优化
  • 南充建网站的资料网络互联网推广
  • 工会网站建设seo网站推广方式
  • 荔湾区网站设计深圳网络推广团队
  • 网站制作合同范本seo的内容主要有哪些方面
  • 重庆网站建设技术支持重庆互联网百度商家
  • 重庆做网站开发的公司有哪些中文域名
  • 石家庄网站推广优化怎么样做推广最有效
  • 做任务得钱的网站怎么卸载windows优化大师
  • 做网站效果怎么样怎么申请建立网站
  • 有关做学校网站的毕业论文优化网站关键词的技巧
  • 公司做百度网站要多少钱深圳seo关键词优化
  • 福州绿光网站建设工作室搜狗输入法下载安装
  • 我的网站被黑了深圳最好seo
  • 做淘宝客需要建网站吗杭州seo中心
  • 翡翠原石网站首页怎么做万网域名注册官网查询
  • wordpress网站程序员培训班招生方案有哪些
  • 0基础自学做网站百度首页精简版
  • 科技与人文网站关键词seo排名
  • 深圳十大网站建设培训机构招生方案模板