java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java ApiPost请求返回406

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

作者:麻辣香蝈蝈

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

一、前言

二、学习内容:

三、问题描述

3.1 问题截图

在这里插入图片描述

3.2 错误简介

3.2.1 HTTP状态码 406 Not Acceptable

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 认识问题

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

在这里插入图片描述

4.2 解决过程

4.2.1 查找原因

查找406会出现的问题

客户端请求头设置问题

服务器端配置问题

不兼容的内容类型

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

4.2.3 定位成功

Result类没有使用 getter 和 setter方法

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

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

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

在这里插入图片描述

4.3.2.3 结果

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

在这里插入图片描述

五、总结:

5.1 注意事项

5.1.1 序列化 getter 和 setter 方法无关

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

5.1.2 Jackson、Gson 等库需要注意

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

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

在这里插入图片描述

例子如下:

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的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文