前端和后端交互数据类型转换

这篇具有很好参考价值的文章主要介绍了前端和后端交互数据类型转换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

页面是男/女 后端pojo类以及数据库中是Integer 0/1  怎么样很方便地转化?

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Person implements Serializable {
    private static final long serialVersionUID = 4346092911489022673L;

    private Integer id;
    private String name;
    private Integer age;

    /**
     * 1 男,0 女
     */
    private Integer gender;

    @JsonDeserialize(using = GenderJsonDeserializer.class)
    public void setGender(Integer gender) {
        this.gender = gender;
    }

    @JsonSerialize(using = GenderJsonSerializer.class)
    public Integer getGender() {
        return gender;
    }
}

@Component
@Slf4j
public class GenderJsonDeserializer extends JsonDeserializer {

    @Override
    public Integer deserialize(JsonParser p, DeserializationContext ctxt)
            throws IOException, JsonProcessingException {
            
        if (ObjectUtils.isEmpty(p)) {
            return null;
        }

        int gender = 0;

        switch (p.getText()) {
            case "男":
                gender = 1;
                break;
            case "女":
                break;
            default:
                throw new RuntimeException("传入的性别为非法字符!");
        }

        log.info("【 GenderJsonDeserializer.deserialize() 】  p.getText() ==> " 
        				+ p.getText() + ",转换后的结果 ==> " + gender);

        return gender;
    }
}

@Component
@Slf4j
public class GenderJsonSerializer extends JsonSerializer {
    @Override
    public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) 
    		throws IOException {
    		
        log.info("【 GenderJsonSerializer.serialize() 】  value ==> " + value);
        if (value.equals(1)) {
            gen.writeString("男");
        } else if (value.equals(0)) {
            gen.writeString("女");
        }
    }
}

前端和后端交互数据类型转换,java,开发语言,前后端类型转化

前端和后端交互数据类型转换,java,开发语言,前后端类型转化

----枚举转化--

在web开发中有时会使用枚举作为参数,而前端在调接口时就会出现传错或者传空导致后端拿不到枚举类型。在这里就使用反序列化@JsonDeserialize

这里是对枚举进行反序列化,所以首先编写一个类

public class EnumDeserializer extends JsonDeserializer<Enum<?>> {

    @Override
    public Enum<?> deserialize(JsonParser jp, DeserializationContext cxt) throws IOException {
        String value = jp.getValueAsString();
        if (StringUtils.isBlank(value))
            return null;
        Class findPropertyType = BeanUtils.findPropertyType(jp.currentName(), jp.getCurrentValue().getClass());
        try {
            return Enum.valueOf(findPropertyType, value);
        } catch (IllegalArgumentException e) {
            return null;
        }
    }
}

该类会判断前端传入的数据的某个字段是否能够解析为枚举,如果不能则返回null。
最后在传入的请求类的枚举字段上加入@JsonDeserialize注解

    @JsonDeserialize(using = EnumDeserializer.class)
    private EventEnum event;


而之后又遇到了数组枚举,那么在反序列化的时候的问题就主要是要拿到数组的泛型类,而通过反射可以做到这一点。

public class ListEnumDeserializer extends JsonDeserializer<List<Enum<?>>> {
    @Override
    public List<Enum<?>> deserialize(JsonParser jp, DeserializationContext cxt) throws IOException {
        ArrayNode treeNode = jp.readValueAsTree();
        Field field;
        try {
            field = jp.getCurrentValue().getClass().getDeclaredField(jp.currentName());
        } catch (NoSuchFieldException e) {
            return null;
        }
        field.setAccessible(true);
        if (!field.getType().equals(List.class)) {
            return null;
        }
        ParameterizedType genericType = (ParameterizedType) field.getGenericType();
        Class actualTypeArgument = (Class) genericType.getActualTypeArguments()[0];
        List<Enum<?>> result = new ArrayList<>();
        Iterator<JsonNode> elements = treeNode.elements();
        while (elements.hasNext()) {
            String appCase = elements.next().asText();
            try {
                Enum anEnum = Enum.valueOf(actualTypeArgument, appCase);
                result.add(anEnum);
            } catch (IllegalArgumentException e) {
                continue;
            }
        }
        if (result.isEmpty()) {
            return null;
        } else {
            return result;
        }
    }
}

同样在最后字段上加入注解

    @JsonDeserialize(using = ListEnumDeserializer.class)
    private List<AppCaseEnum> appCase;文章来源地址https://www.toymoban.com/news/detail-843636.html

到了这里,关于前端和后端交互数据类型转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前端和后端在软件开发中的两个重要部分

    前端和后端是软件开发中的两个重要部分,它们在职责、技术栈和工作重点上都有所不同。以下是前端和后端的主要区别: 职责不同 : 前端 :前端主要负责用户可以看到的部分,即用户界面(UI)和用户体验(UX)。前端开发者关注如何展示信息,并确保用户可以方便地与

    2024年04月10日
    浏览(25)
  • 从技能需求到就业前景,了解前端和后端开发的优缺点和个人选择

    命运决定的不是你的人生,能决定你人生的只有自己。 前端和后端是Web开发中两个不可或缺的领域。前端开发主要负责网页的界面设计和交互行为,利用HTML、CSS和JavaScript等技术,将网页的外观和功能实现。而后端开发则主要负责网站的后台逻辑和数据处理部分,利用服务器

    2024年02月08日
    浏览(21)
  • Android Java代码与JNI交互基础数据类型转换(三)

    🔥 Android Studio 版本 🔥  🔥 基础类型数据的转换 🔥 定义传递基础数据类型到Native的JNI接口函数 Native层创建callNativeInt 提供给Java调用 CMakeLists.txt 文件下配置动态库名称  添加 target_link_libraries 配置 Java调用Native层函数   运行打印日志 Java调用Native分别打印基础类型数据  下

    2024年02月13日
    浏览(21)
  • Jeecg开发框架前端VUE2数据页面与后端数据库交互实现

    ​ JeecgBoot 是一款基于代码生成器的 低代码 开发平台,零代码开发!采用前后端分离架构:SpringBoot2.x,Ant DesignVue,Mybatis-plus,Shiro,JWT。强大的代码生成器让前后端代码一键生成,无需写任何代码! JeecgBoot引领新的开发模式(Online Coding模式- 代码生成器模式- 手工MERGE智能开发

    2024年02月11日
    浏览(20)
  • 在前后端分离的项目中,Springboot vue,前端把json传到后端,后端用一个类接收,json中的数据是怎么转换类型的

    在前后端分离的项目中,前端通常会将数据以 JSON 格式传输给后端,后端需要将接收到的 JSON 数据转换为对应的类型。这个过程可以通过后端框架和库来自动完成。 在Spring Boot中,后端可以使用相关的库来实现JSON数据的转换。常见的库包括Jackson、Gson和FastJson等。这些库提供

    2024年02月13日
    浏览(31)
  • 前端向Java后端请求blob、arraybuffer类型的数据流

    前端需要获取后端音频文件,但遇到跨域问题,不能直接使用url获取,需求必须使用流将文件传到前端。因此,考虑Java后端读取音频文件,然后向前端发送数据流,前端按后端发送类型将数据接收,并合成其格式文件。 引入axios.min.js文件 其中,responseType:‘arraybuffer’,写成

    2024年02月13日
    浏览(27)
  • ajax中的和后端交互的put、patch、delete请求

    1、向后端发送一个put请求,请求修改数据: 重点:修改谁、修改成什么: 修改谁:修改user下第一个: user内容: 修改成什么:修改成“username=hhhpassword=575” 完整代码:(只复制了body里面的代码)  结果: json原来的内容: json文件内容的变化: user内容变化:   2、向后端

    2024年02月06日
    浏览(48)
  • 前端和后端分别是什么?

      从技术工具来看: 前端:常见的 html5、JavaScript、jQuery... 后端:spring、tomcet、JVM,MySQL... 毕竟,如果这个问题问一个老后端,他掰掰手指可以给你罗列出一堆的名词来,比如设计模式、数据库优化、框架、JVM、网络编程...... 从简单描述来看: 前端:入门简单,先易后难,

    2024年02月09日
    浏览(24)
  • 前端分页和后端分页

    分页可以在前端或后端进行,具体取决于项目的需求和实现方式。以下是前端分页和后端分页的一些特点和适用场景: 前端分页 : 特点 :前端分页是指在前端(浏览器端)对数据进行分页处理,即一次性获取所有数据,然后在前端进行分页展示和切换。 优点 :减轻了服务

    2024年04月10日
    浏览(55)
  • 前端和后端解决跨域问题的方法

    目前很多java web开发都是采用前后端分离框架进行开发,相比于单体项目容易产生跨域问题。  后端接收到请求并返回结果了,浏览器把这个响应拦截了。 浏览器 基于同源策略,如果请求的网页和当前的服务 不是同源的 ,并且发送的是 XHR (XMLHttpRequest)请求,就会产生跨域

    2024年04月26日
    浏览(18)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包