SpringBoot基礎(chǔ)實(shí)戰(zhàn)系列(二)springboot解析json與HttpMessageConverter

SpringBoot解析Json格式數(shù)據(jù)

@ResponseBody

注:該注解表示前端請(qǐng)求后端controller,后端響應(yīng)請(qǐng)求返回 json 格式數(shù)據(jù)前端,實(shí)質(zhì)就是將java對(duì)象序列化

1.創(chuàng)建Controller

注:springboot默認(rèn)就已經(jīng)支持返回json格式數(shù)據(jù),只需要加上@ResponseBody注解即可

    /**
     * 通過(guò) @responsebody 注解返回 json 格式數(shù)據(jù)
     * @return
     */
    @RequestMapping("/getAll")
    @ResponseBody
    public List<User> getUsers(){
        ArrayList<User> users = new ArrayList<>();
        for(int i=0; i < 10 ; i++){
            User user = new User();
            user.setId(String.valueOf(i));
            user.setUsername("shanggushenlong>>>"+i);
            user.setAge(i);
            user.setBirthday(new Date());
            users.add(user);
        }
        return users;
    }

2.創(chuàng)建bean

public class User {
    private String id;
    private String username;
    private Integer age;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date birthday;

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "id='" + id + '\'' +
                ", username='" + username + '\'' +
                ", age=" + age +
                ", birthday=" + birthday +
                '}';
    }

3.結(jié)果

在這里插入圖片描述

@RequestBody

注:該注解表示前端發(fā)起請(qǐng)求時(shí),要求請(qǐng)求體為 json 格式數(shù)據(jù),實(shí)質(zhì)就是反序列化到對(duì)應(yīng)的對(duì)象中

1.創(chuàng)建controller

   /**
     * 前端傳入json數(shù)據(jù),后端以String字符串接收
     * @param userStr
     * @return
     */
    @RequestMapping("/setUser")
    @ResponseBody
    public String getUser(@RequestBody String userStr){
        System.out.println(userStr);
        return userStr.toString();
    }

    /**
     * 前端傳入json,后端用 user 對(duì)象接收,@RequestBody 能夠自動(dòng)將前端傳入的json與bean
     * 自動(dòng)序列化對(duì)應(yīng)成功一個(gè)實(shí)例對(duì)象
     * @param user
     * @return
     */
    @RequestMapping("/setUser2")
    @ResponseBody
    public String getUser2(@RequestBody User user){
        System.out.println(user);
        return user.toString();
    }

2.結(jié)果

  • 使用postman發(fā)起請(qǐng)求,需要在body中添加相應(yīng)的請(qǐng)求體
  • 可能出現(xiàn)的問(wèn)題:時(shí)間格式轉(zhuǎn)換報(bào)錯(cuò) ------ 解決方法,在 bean 實(shí)體類中對(duì)應(yīng)的 birthday 字段添加注解@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    在這里插入圖片描述

    在這里插入圖片描述

HttpMessageConverter

springboot對(duì)于json默認(rèn)支持的比較好,但是有時(shí)候需要自定義配置,比如上面的時(shí)間格式配置,假如你的項(xiàng)目有很多個(gè)bean,這個(gè)時(shí)候每一個(gè)bean去添加注解比較麻煩,這個(gè)時(shí)候就可以使用springboot提供的配置類,自己手動(dòng)定義配置。

@Configuration
public class WebMvcConfig {

    @Bean
    MappingJackson2HttpMessageConverter MyHttpMessageConverter(){
        // 1.創(chuàng)建一個(gè) Convert
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        // 2. 創(chuàng)建objectmapper
        ObjectMapper objectMapper = new ObjectMapper();
        // 配置時(shí)間格式
        objectMapper.setDateFormat(new SimpleDateFormat("yyyy/MM/dd"));

        converter.setObjectMapper(objectMapper);
        return converter;
    }
}
  • 使用創(chuàng)建一個(gè)config類,使用 MappingJackson2HttpMessageConverter類,手動(dòng)添加json相關(guān)的配置

  • 可能出現(xiàn)的問(wèn)題:創(chuàng)建配置類,必須在類上添加注解 @Configuration,且在方法上加上 @Bean,只有這樣配置才會(huì)生效。
    結(jié)果如下:

    在這里插入圖片描述

    注:此處可能產(chǎn)生的問(wèn)題是:配置類寫(xiě)了,沒(méi)有達(dá)到預(yù)期的效果,可能是 bean 類中該字段注解沒(méi)有去掉

  • json 格式數(shù)據(jù)在前后分離的時(shí)代,是非常重要的一種數(shù)據(jù)格式,因此HttpMessageConverter 也變的很重要,我們可以在此相關(guān)類中配置相應(yīng)的規(guī)則

  • springboot提供的相關(guān)配置類 JacksonHttpMessageConvertersConfiguration MappingJackson2HttpMessageConverter

希望自己能一直保持初衷,文章一直寫(xiě)下去,和大家一起成長(zhǎng)

本系列代碼github地址:https://github.com/shanggushenlong/springboot-demo

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容