java jersey dto对象,SpringBoot + jersey 实现接受 json对象

为什么使用Jersey?

刚开始使用Jersey的时候,我也会有疑问,Spring家族已经很完善,为什么要用Jersey,但是后来做项目多了就感受到两者的差异.

1.Jersey是JAX-RS标准的参考实现,是Java领域中开发REST式web/服务的"正统"工具,Spring属于自成一派,不是严格意义上的实现REST,但是springMVC已经支持RestFul风格,这个对我来说并不影响我开发项目.

2.这点很关键,就是spring家族的庞大,导致spring依赖很重,打包占用较大的空间,Jersey相比就比较轻,反而更适合项目开发

如何使用Jersey?

这个官方文档已经很详细了,包括配置注解等等,Jerey的使用我通常是和SpringBoot搭配使用,所以这里我只讲我遇到的官网找不到的内容,就是Jersey接受json对象转pojo.

首先Jersey是支持Json的,官网是这样介绍的,JSONP等等格式的JSON都支持,这里我用的Jackson.要想Jersey支持Json肯定要配置一个Json配置,并在JerseyConfig里面注册.

JacksonConfig配置

@Configuration

public class JacksonConfig {

public static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

/*

* jackson objectMapper注入及配置

*

* @return ObjectMapper

*/

@Bean

public ObjectMapper objectMapper() {

ObjectMapper mapper = new ObjectMapper();

JavaTimeModule javaTimeModule = new JavaTimeModule();

javaTimeModule.addDeserializer(LocalDateTime.class,

new LocalDateTimeDeserializer(FORMATTER))

.addSerializer(new LocalDateTimeSerializer(FORMATTER));

mapper.registerModule(javaTimeModule)

.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false)

//不序列化null和""

.setSerializationInclusion(JsonInclude.Include.NON_NULL)

.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"))

.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

return mapper;

}

}

JerseyConfig配置

/**

* 配置注册

*/

public JerseyConfig() {

// 开启api请求日志记录

super.register(new LoggingFeature(null, Level.INFO, null, null));

// 开启json to bean转换

super.register(CustomJsonProvider.class);

scan(basePackage);

}

配置好了后,就开始Json to Bean的转换了,然后就是带代码实现:

Consumes输入Json格式 Produces输入Json格式

@Produces(MediaType.APPLICATION_JSON)

@Consumes(MediaType.APPLICATION_JSON)

@Path("/selectBook")

@POST

public ResponseDTO selectBook( Book book){

return new ResponseDTO(Code.SUCCESS.value(), Message.SUCCESS.value());

}

//Book 是一个实体Bean

这样可以实现接受Json类型,然后转换成book对象,但是假如说你还有token或者其他参数要输入怎么办.(这里是一个坑,因为Param不能有太多的类型注解,比如@QueryParam ,@HeaderParam,@PathParam 等等,这样Json to Bean的转换就会出错,或者是接收不到参数等等问题)这里可以实现用HttpServletRequest @Context HttpServletRequest request 这个来在逻辑代码内接受参数:

@Produces(MediaType.APPLICATION_JSON)

@Consumes(MediaType.APPLICATION_JSON)

@Path("/selectBook")

@POST

public ResponseDTO selectBook( @Context HttpServletRequest request

,Book book){

String token = request.getHeader("token");

// ....代码

return new ResponseDTO(Code.SUCCESS.value(), Message.SUCCESS.value());

}

这样就可以实现Json接受参数,然后转换成实体对象了!

如果你也需要这样做的,不妨可以试试.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Protobuf(Protocol Buffers)是一种轻量级的数据序列化格式,用于结构化数据的存储和交换。它可以将数据对象序列化为二进制格式,也可以将二进制数据反序列化为数据对象。相比于JSON,Protobuf具有更高的性能和更小的数据体积。 在使用Protobuf进行DTO(Data Transfer Object)对象JSON之间的相互转换时,可以按照以下步骤进行: 1. 定义Protobuf消息类型:首先需要定义Protobuf消息类型,即定义数据结构和字段。可以使用Protobuf的语言特定的语法来定义消息类型,例如使用.proto文件定义。 2. 生成代码:根据定义的Protobuf消息类型,使用Protobuf编译器生成对应的代码文件。不同的编程语言可能有不同的编译器,例如对于Java语言可以使用protoc编译器生成Java类。 3. 将DTO对象转换为Protobuf消息:使用生成的代码,将DTO对象转换为对应的Protobuf消息对象。可以通过设置消息对象的字段值来实现。 4. 将Protobuf消息转换为JSON:使用Protobuf提供的序列化方法,将Protobuf消息对象序列化为二进制数据。然后可以使用JSON库将二进制数据转换为JSON格式的字符串。 5. 将JSON转换为Protobuf消息:使用JSON库将JSON格式的字符串解析为二进制数据。然后使用Protobuf提供的反序列化方法,将二进制数据反序列化为Protobuf消息对象。 总结一下,将DTO对象转换为JSON可以分为两步:DTO对象转换为Protobuf消息,Protobuf消息转换为JSON。反之,将JSON转换为DTO对象也可以分为两步:JSON转换为Protobuf消息,Protobuf消息转换为DTO对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值