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接受参数,然后转换成实体对象了!
如果你也需要这样做的,不妨可以试试.

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,479评论 19 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,251评论 6 342
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong阅读 22,926评论 1 92
  • 1.1 spring IoC容器和beans的简介 Spring 框架的最核心基础的功能是IoC(控制反转)容器,...
    simoscode阅读 6,843评论 2 22
  • 池塘由水和土壤组成(工厂化除外),其中土在底部如同泡茶一样,不一样的土壤养出不养一样的水,每个地区的土壤大...
    简试阅读 206评论 0 0

友情链接更多精彩内容