Java ApiPost请求返回406状态码问题的解决方案

 更新时间:2025年04月22日 10:07:12   作者:麻辣香蝈蝈  
APIPost是一款专为开发者和测试人员设计的API测试工具,类似于Postman,但提供了更多的团队协作和文档管理功能,它可以帮助你更好地进行接口调试和集成测试,但遇到了请求后返回的是406状态,所以本文给大家介绍了Java ApiPost请求返回406状态码问题的解决方案

一、前言

  • 使用ApiPost请求的时候遇到问题记录
  • 这是记录思考过程,看结果直接看5.1.2小节

二、学习内容:

  • 序列化与反序列化
  • 数据传输

三、问题描述

3.1 问题截图

  • 前端请求后返回的是406状态

在这里插入图片描述

3.2 错误简介

3.2.1 HTTP状态码 406 Not Acceptable

  • 客户端发送一个请求,并且在请求头中指定了一个或多个可接受的内容类型(通过 Accept 头字段)
  • 🌟 而服务器无法提供任何这些类型的内容时,就会返回这个状态码。

3.2.2 序列化和反序列化

Java中的序列化和反序列化是将对象转换为字节流和将字节流转换回对象的过程

  • 序列化使对象能够被存储到文件、发送到网络中或进行其他操作
  • 反序列化则是将这些字节流恢复为原来的对象。

3.3 后端问题位置

后台没有明显报错

@PostMapping("login")
public Result login(@RequestBody AdminLoginDTO adminLoginDTO) {
    log.info("adminLoginDTO:{}", adminLoginDTO);
    String token = adminService.login(adminLoginDTO);
    return Result.success(token);
}

四、解决方案:

4.1 认识问题

  • 在Java中,要使一个对象可被序列化,必须实现 java.io.Serializable 接口。这个接口是一个标记接口,不需要实现任何方法

如图代码生成器生成的实体类就有

在这里插入图片描述

4.2 解决过程

4.2.1 查找原因

查找406会出现的问题

客户端请求头设置问题

  • 问题核心:客户端请求头中的 Accept 字段指定的内容类型,服务器无法提供。

服务器端配置问题

  • 问题核心:服务器没有配置正确的消息转换器来支持客户端请求的内容类型。

不兼容的内容类型

  • 问题核心:客户端和服务器之间存在内容类型不兼容的问题。 4.2.2 根据原因检查代码错误

观察后发现主要是类型的错误,不管是客户端还是服务器肯定哪里类型转换出了问题

  • 可是这些配置一般Spring框架都已经配置好了,平时也没遇到这个问题,代码也是自动生成的
  • 所以肯定是自己写的返回的类型少了什么导致无法转换

4.2.3 定位成功

Result类没有使用 getter 和 setter方法

为什么 @Data 注解可以解决问题

  • 自动生成 gettersetter 方法:@Data 注解自动生成了所有属性的 gettersetter 方法。
  • 序列化和反序列化:使用 @Data 注解后,序列化库(如 Jackson 或 Gson)能够正确识别并处理这些方法。
    注意是序列化库

如图注解加上或者自己写 gettersetter 方法即可

当时只想着后端代码能用即可,没注意传输的问题

在这里插入图片描述

4.3.2.3 结果

自定义的返回类能正常传输

在这里插入图片描述

五、总结:

5.1 注意事项

5.1.1 序列化 getter 和 setter 方法无关

无论是否有 getter 和 setter 方法,只要类实现了 Serializable 接口,实例就能够被序列化和反序列化。

  • 如果你不使用序列化库,或者你自定义了序列化和反序列化的方法,那么不使用 getter 和 setter 也是可以的

5.1.2 Jackson、Gson 等库需要注意

本次错误主要原因: getter 和 setter 方法没写,序列化的时候可能访问不到对象

传输使用到了Jackson 库,所以gettersetter 方法尽量都要写出

在这里插入图片描述

  • 与序列化库的兼容:如 Jackson 和 Gson 等库在处理 Java 对象时,通常会使用 getter 和 setter 方法来访问字段的值。如果没有这些方法,这些库可能无法正确识别或处理一些字段。

例子如下:

import com.fasterxml.jackson.databind.ObjectMapper;  

public class Main {  
    public static void main(String[] args) throws Exception {  
        ObjectMapper objectMapper = new ObjectMapper();  
        
        // 创建对象  
        Person person = new Person();  
        person.setName("Alice");  
        person.setAge(30);  
        
        // 序列化  
        String jsonString = objectMapper.writeValueAsString(person);  
        System.out.println("Serialized JSON: " + jsonString);  
        
        // 反序列化  
        Person deserializedPerson = objectMapper.readValue(jsonString, Person.class);  
        System.out.println("Deserialized Person: " + deserializedPerson);  
    }  
}

声明:如本内容中存在错误或不准确之处,欢迎指正。

以上就是Java ApiPost请求返回406状态码问题的解决方案的详细内容,更多关于Java ApiPost请求返回406的资料请关注脚本之家其它相关文章!

相关文章

  • Java运算符易混点之&&、||、&、|与 到底差在哪详解

    Java运算符易混点之&&、||、&、|与 到底差在哪详解

    这篇文章主要介绍了Java运算符易混点之&&、||、&、|与 到底差在哪的相关资料,强调在条件判断和位运算场景下的正确使用法,并提供示例代码帮助理解大家理解,需要的朋友可以参考下
    2026-06-06
  • IntelliJ IDEA软件内如何实现更新到最新版本

    IntelliJ IDEA软件内如何实现更新到最新版本

    文章介绍了如何在IntelliJIDEA中更新到最新版本以及如何回到之前忽略的版本,解决办法是通过选择"IgnoreThisUpdate"来跳过旧版本,重复操作即可更新到最新版本
    2024-12-12
  • Java SpringMVC 异常处理SimpleMappingExceptionResolver类详解

    Java SpringMVC 异常处理SimpleMappingExceptionResolver类详解

    这篇文章主要介绍了SpringMVC 异常处理SimpleMappingExceptionResolver类详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • Spring Boot 2.0 配置属性自定义转换的方法

    Spring Boot 2.0 配置属性自定义转换的方法

    这篇文章主要介绍了Spring Boot 2.0 配置属性自定义转换的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • JDK从8升级到21的问题集(附案例代码)

    JDK从8升级到21的问题集(附案例代码)

    JDK 8升级到JDK 21是一个重要的版本迁移,涉及语法、模块化、API变更等多方面调整,这篇文章主要介绍了JDK从8升级到21问题的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-09-09
  • 解决SpringMVC 返回Java8 时间JSON数据的格式化问题处理

    解决SpringMVC 返回Java8 时间JSON数据的格式化问题处理

    本篇文章主要介绍了解决SpringMVC 返回Java8 时间JSON数据的格式化问题处理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • MyBatis批量插入大量数据(1w以上)

    MyBatis批量插入大量数据(1w以上)

    MyBatis进行批量插入数时,一次性插入超过一千条的时候MyBatis开始报错,本文主要介绍了MyBatis批量插入大量数据的解决方法,感兴趣的可以了解一下
    2022-01-01
  • Java中ArrayList和Vector的区别

    Java中ArrayList和Vector的区别

    本文主要介绍了Java中ArrayList和Vector的区别,包括线程安全性、性能、同步机制、扩容机制、遍历方式等,具有一定的参考价值,感兴趣的可以了解一下
    2024-11-11
  • Spring中的循环依赖问题

    Spring中的循环依赖问题

    在Spring框架中,循环依赖是指两个或多个Bean相互依赖,这导致在Bean的创建过程中出现依赖死锁,为了解决这一问题,Spring引入了三级缓存机制,包括singletonObjects、earlySingletonObjects和singletonFactories
    2024-09-09
  • springboot2如何禁用自带tomcat的session功能

    springboot2如何禁用自带tomcat的session功能

    这篇文章主要介绍了springboot2如何禁用自带tomcat的session功能,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11

最新评论