最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot自定義對(duì)象參數(shù)實(shí)現(xiàn)自動(dòng)類型轉(zhuǎn)換與格式化

 更新時(shí)間:2022年09月29日 16:28:12   作者:劉婉晴  
SpringBoot 通過自定義對(duì)象參數(shù),可以實(shí)現(xiàn)自動(dòng)類型轉(zhuǎn)換與格式化,并可以級(jí)聯(lián)封裝,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧

序章

問題提出一:

當(dāng)我們用表單獲取一個(gè) Person 對(duì)象的所有屬性值時(shí), SpringBoot 是否可以直接根據(jù)這些屬性值將其轉(zhuǎn)換為 Person 對(duì)象

回答:

當(dāng)然可以,SpringBoot 通過自定義對(duì)象參數(shù),可以實(shí)現(xiàn)自動(dòng)類型轉(zhuǎn)換與格式化,并可以級(jí)聯(lián)封裝(一個(gè)對(duì)象擁有另一個(gè)對(duì)象作為屬性時(shí),也可以封裝)。

一、實(shí)體類 Bean

person類

注: 構(gòu)造方法一定要寫全,無參數(shù)和有參數(shù)的都要寫,不然封裝過程會(huì)出問題

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 屬性值要與類的屬性名一一對(duì)應(yīng)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>自定義參數(shù)綁定原理</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 請(qǐng)求, 返回封裝好的 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;
    }
}

四、運(yùn)行結(jié)果截圖

提出問題二: SpringBoot 之所以可以自動(dòng)獲取表單值封裝為指定類型對(duì)象,是因?yàn)镾pringBoot 具有嚴(yán)密的參數(shù)解析機(jī)制, 但是若我們的輸入值SpringBoot 不能解析時(shí),難道我們就只能坐以待斃了嘛

回答: 不是,我們可以通過WebMvcConfigurer定制化SpringMVC的功能,通過重寫 addFormatters 方法自定義類型參數(shù)

示例

如下表單中的 “huahua,5個(gè)月” 字符串是不能被 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個(gè)月"/>
        <input type="submit" value="保存">
    </form>

自定義類型參數(shù) 封裝POJO:

編寫WebConfig類實(shí)現(xiàn)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;
                    }
                });
            }
        };
    }
}

到此這篇關(guān)于SpringBoot自定義對(duì)象參數(shù)實(shí)現(xiàn)自動(dòng)類型轉(zhuǎn)換與格式化的文章就介紹到這了,更多相關(guān)SpringBoot自定義對(duì)象參數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot+Vue跨域配置(CORS)問題得解決過程

    SpringBoot+Vue跨域配置(CORS)問題得解決過程

    在使用 Spring Boot 和 Vue 開發(fā)前后端分離的項(xiàng)目時(shí),跨域資源共享(CORS)問題是一個(gè)常見的挑戰(zhàn),接下來,我將分享我是如何一步步解決這個(gè)問題的,包括中間的一些試錯(cuò)過程,希望能夠幫助到正在經(jīng)歷類似問題的你
    2024-08-08
  • Java實(shí)現(xiàn)簡(jiǎn)易界面通訊錄

    Java實(shí)現(xiàn)簡(jiǎn)易界面通訊錄

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)易界面通訊錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Java?NIO?中?Selector?解析

    Java?NIO?中?Selector?解析

    這篇文章主要介紹了Java?NIO?中?Selector,Selector即選擇器,選擇器提供選擇執(zhí)行已經(jīng)就緒的任務(wù)的能力即為翻譯為多路復(fù)用,下面文章對(duì)Selector詳細(xì)介紹內(nèi)容,需要的小伙伴可以參考一下
    2022-02-02
  • 最新評(píng)論

    赤峰市| 潞城市| 阳山县| 松潘县| 镇江市| 抚宁县| 宜州市| 房产| 永德县| 永吉县| 鹰潭市| 合江县| 涞水县| 乌审旗| 石城县| 淅川县| 沅江市| 三亚市| 蒲江县| 象州县| 江油市| 六安市| 应城市| 铁力市| 桦川县| 育儿| 昔阳县| 嘉黎县| 淳化县| 洪江市| 沁源县| 临高县| 通化县| 德钦县| 朝阳市| 霍城县| 晋宁县| 扎鲁特旗| 嵩明县| 新晃| 沛县|