SpringBoot自定义对象参数超详细介绍作用

目录
  • 一、实体类 Bean
  • 二、前端表单index.html
  • 三、Controller类
  • 四、运行结果截图

问题提出一:

当我们用表单获取一个 Person 对象的所有属性值时, SpringBoot 是否可以直接根据这些属性值将其转换为 Person 对象

回答:

当然可以,SpringBoot 通过自定义对象参数,可以实现自动类型转换与格式化,并可以级联封装(一个对象拥有另一个对象作为属性时,也可以封装)。

一、实体类 Bean

person类

注: 构造方法一定要写全,无参数和有参数的都要写,不然封装过程会出问题

import org.springframework.context.annotation.Bean;
import javax.xml.crypto.Data;
public class Person {
    String userName;
    int age;
    Pet pet;
    public Person() {
    }
    public Person(String userName, int age, Pet pet) {
        this.userName = userName;
        this.age = age;
        this.pet = pet;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public Pet getPet() {
        return pet;
    }
    public void setPet(Pet pet) {
        this.pet = pet;
    }
}

pet类

package com.example.demo2.bean;
public class Pet {
    String name;
    String age;
    public Pet() {
    }
    public Pet(String name, String age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
}

二、前端表单index.html

注意 input 的 name 属性值要与类的属性名一一对应

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>自定义参数绑定原理</title>
</head>
<body>
    <form action="/saveuser" method="post">
        姓名: <input name="userName" value="liuwanqing"/> <br/>
        年龄: <input name="age" value="20"/> <br/>
        宠物姓名:<input name="pet.name"/><br/>
        宠物年龄:<input name="pet.age"  />
        <input type="submit" value="保存">
    </form>
</body>
</html>

三、Controller类

Post /saveuser 请求, 返回封装好的 Person 类

package com.example.demo2.controller;
import com.example.demo2.bean.Person;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ParameterTestController {
    @PostMapping("/saveuser")
    public Person saveuser(Person person){
        return person;
    }
}

四、运行结果截图

提出问题二: SpringBoot 之所以可以自动获取表单值封装为指定类型对象,是因为SpringBoot 具有严密的参数解析机制, 但是若我们的输入值SpringBoot 不能解析时,难道我们就只能坐以待毙了嘛

回答: 不是,我们可以通过WebMvcConfigurer定制化SpringMVC的功能,通过重写 addFormatters 方法自定义类型参数

示例

如下表单中的 “huahua,5个月” 字符串是不能被 SpringBoot 解析为 Pet 类型的

    <form action="/saveuser" method="post">
        姓名: <input name="userName" value="liuwanqing"/> <br/>
        年龄: <input name="age" value="20"/> <br/>
        宠物:<input name="pet" value="huahua,5个月"/>
        <input type="submit" value="保存">
    </form>

自定义类型参数 封装POJO:

编写WebConfig类实现WebMvcConfigurer类,重写 addFormatters 方法

package com.example.demo2.config;
import com.example.demo2.bean.Pet;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.convert.converter.Converter;
import org.springframework.format.FormatterRegistry;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer{
    //1、WebMvcConfigurer定制化SpringMVC的功能
    @Bean
    public WebMvcConfigurer webMvcConfigurer(){
        return new WebMvcConfigurer() {
            @Override
            public void addFormatters(FormatterRegistry registry) {
                registry.addConverter(new Converter<String, Pet>() {
                    @Override
                    public Pet convert(String source) {
                        if(!StringUtils.isEmpty(source)){
                            Pet pet = new Pet();
                            String[] split = source.split(",");
                            pet.setName(split[0]);
                            pet.setAge(split[1]);
                            return pet;
                        }
                        return null;
                    }
                });
            }
        };
    }
}

到此这篇关于SpringBoot自定义对象参数超详细介绍作用的文章就介绍到这了,更多相关SpringBoot自定义对象参数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringBoot自定义对象参数实现自动类型转换与格式化

    目录 序章 一.实体类 Bean 二.前端表单index.html 三.Controller 类 四.运行结果截图 序章 问题提出一: 当我们用表单获取一个 Person 对象的所有属性值时, SpringBoot 是否可以直接根据这些属性值将其转换为 Person 对象 回答: 当然可以,SpringBoot 通过自定义对象参数,可以实现自动类型转换与格式化,并可以级联封装(一个对象拥有另一个对象作为属性时,也可以封装). 一.实体类 Bean person类 注: 构造方法一定要写全,无参数

  • SpringMVC超详细介绍自定义拦截器

    目录 1.什么是拦截器 2.自定义拦截器执行流程图 3.自定义拦截器应用实例 1.快速入门 2.注意事项和细节 3.Debug执行流程 4.多个拦截器 1.多个拦截器执行流程示意图 2.应用实例 3.主要事项和细节 1.什么是拦截器 说明 Spring MVC 也可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能. 自定义的拦截器必须实现 HandlerInterceptor 接口 自定义拦截器的三个方法 preHandle():这个方法在业务处理器处理请求之前被调用,在该方

  • Android超详细介绍自定义多选框与点击按钮跳转界面的实现

    总程:在avtivity_main.xml设计5个控件,btn1-5,点击btn1弹出一个多选对话框,点击按钮btn1弹出一个多选框可选择你喜欢的打野英雄,点击btn2跳转到activity_main2界面(就是图片,不可选择)设计思路流程:在activity_main.xml布局界面,总体在头目录进行垂直排列,然后镶嵌5个水平的线性布局(左是ImageView,右边是Button按钮)由于5张图的大小在一个屏幕显示不出来,所以添加一个ScoveView滚动,以使所有资源可以看到! 在MainA

  • SpringBoot底层注解超详细介绍

    目录 1. @Configuration 2. @bean 3. @Import 4. @Conditional条件装配 5. 配置绑定 SpringBoot自动配置原理(源码分析) 1. @Configuration —— 放在类前注释 用于表示配置类,配置类也是一个组件 @Configuration(proxyBeanMethods = true) // 配置类 == 配置文件 public class MyConfig { } 通过 proxyBeanMethods 很好的解决了组件依赖的

  • Springboot启动扩展点超详细教程小结

    1.背景 Spring的核心思想就是容器,当容器refresh的时候,外部看上去风平浪静,其实内部则是一片惊涛骇浪,汪洋一片.Springboot更是封装了Spring,遵循约定大于配置,加上自动装配的机制.很多时候我们只要引用了一个依赖,几乎是零配置就能完成一个功能的装配. 我非常喜欢这种自动装配的机制,所以在自己开发中间件和公共依赖工具的时候也会用到这个特性.让使用者以最小的代价接入.想要把自动装配玩的转,就必须要了解spring对于bean的构造生命周期以及各个扩展接口.当然了解了bean

  • Vue计算属性与侦听器和过滤器超详细介绍

    目录 1. 计算属性 1.1 使用方法 1.2 案例-购物车合计使用计算属性 2. 侦听器 3. 过滤器 1. 计算属性 1.1 使用方法 概述: 模板中放入太多的逻辑会让模板过重且难以维护,使用计算属性可以让模板变得简洁易于维护.计算属性是基于它们的响应式依赖进行缓存的,计算属性比较适合对多个变量或者对象进行处理后返回一个结果值,也就是数多个变量中的某一个值发生了变化则我们监控的这个值也就会发生变化. 计算属性定义在Vue对象中,通过关键词computed属性对象中定义一个个函数,并返回一个值

  • React路由渲染方式与withRouter高阶组件及自定义导航组件应用详细介绍

    目录 1. 路由的三种渲染方式 1.1 component渲染方式 1.2 render方式渲染 1.3 案例-登录成功才能访问某个页面 1.4 children方式渲染 2. withRouter高阶组件 3. 自定义导航组件 1. 路由的三种渲染方式 1.1 component渲染方式 描述: 这种渲染方式有两种,一种是类方式渲染,一种是函数方式渲染. 语法: <Route path="/home" component={Home} /> 或 <Route pat

  • Java DefaultListableBeanFactory接口超详细介绍

    目录 前言 AliasRegistry SimpleAliasRegistry SingletonBeanRegistry DefaultSingletonBeanRegistry FactoryBeanRegistrySupport AbstractBeanFactory AbstractAutowireCapableBeanFactory BeanDefinitionRegistry ConfigurableListableBeanFactory 前言 本文,对bean工厂的接口做分析梳理具

  • SpringBoot封装响应处理超详细讲解

    目录 背景 报文基本格式 创建枚举类 定义统一返回结果实体类 定义返回工具类 统一报文封装在接口中的使用 统一异常处理 小结 背景 越来越多的项目开始基于前后端分离的模式进行开发,这对后端接口的报文格式便有了一定的要求.通常,我们会采用JSON格式作为前后端交换数据格式,从而减少沟通成本等. 报文基本格式 一般报文格式通常会包含状态码.状态描述(或错误提示信息).业务数据等信息. 在此基础上,不同的架构师.项目搭建者可能会有所调整. 但从整体上来说,基本上都是大同小异. 在SpringBoot项

  • Kotlin函数式编程超详细介绍

    目录 1.函数式编程 2.函数类别 3.变换函数(transform) 4.过滤函数(filter) 5.合并函数(combine) 1.函数式编程 我们都知道java是面向对象编程范式.在java的世界,一切皆对象. 函数式编程范式是有抽象数学的lambda演算发展而来,主要依赖高阶函数返回的数据,这些高级函数专用于处理各种集合,可以方便的联合多个函数构建链式操作,以创建复杂的计算行为. 所谓高级函数就是以函数为参数或返回值是函数的函数.这点,前面的文章,有过简单介绍. 2.函数类别 一个函数

随机推荐