在Springboot中,某些字段未在JSON中解析/反序列化 [英] Some fields not getting parsed/deserialized in JSON in Springboot

查看:1332
本文介绍了在Springboot中,某些字段未在JSON中解析/反序列化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用下面的JSON通过springboot代码进行解析:

I am using the below JSON to get parsed by my springboot code:

{
    "id" :123, 
    "Subject" : "English",
    "name": {
    "Firstname": "Hemant",
    "Middlename": "kumar", 
    "Lastname": "Mamod"
    }
}

但是在解析/反序列化时,我得到的是Student对象:

But on parsing/deserializing it I am getting this in the object of Student:

学生[id = 123,主题=空,名称=名称[名字=空, Middlename = null,Lastname = null]]

Student [id=123, Subject=null, name=Name [Firstname=null, Middlename=null, Lastname=null]]

我有铅在公共场所&各地的设置者,使每个领域都有反序列化的资格. 我指的是- https://www.baeldung.com/jackson -field-serializable-deserializable-or-not

I aleady have public gettters & setters everywhere which makes every field eligible for deserialization. I am referring this - https://www.baeldung.com/jackson-field-serializable-deserializable-or-not

以下是我正在使用的代码段:

Below is the code snippet I am using:

Restcontroller:

Restcontroller:

    package com.example.demo;
    import java.util.*;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.http.MediaType;
    import org.springframework.web.bind.annotation.*;


    @SpringBootApplication
    @RestController
    public class Demo1Application {


    @Autowired
    Student student;
    List<Student> students = new ArrayList<>();


    @RequestMapping(value="/saveStudent", method=RequestMethod.POST,consumes=MediaType.APPLICATION_JSON_VALUE)
    public String savestudent (@RequestBody Student s1) {

        System.out.println(s1);
        return "success";
    }   


    public static void main(String[] args) {
        SpringApplication.run(Demo1Application.class, args);
        System.out.println("Hello");
    }
    }

学生Bean类:

package com.example.demo;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

@Component
public class Student {
    int id;
    String Subject;

    @Autowired
    @Qualifier("name")
    Name name;


    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getSubjects() {
        return Subject;
    }
    public void setSubject(String subject) {
        Subject = subject;
    }

    public void setName(Name name) {
        this.name = name;  
    }
    public Name getName() {  
        return name  ;
    }
@Override
public String toString() {
    return "Student [id=" + id + ", Subject=" + Subject + ", name=" + name + "]";
    }
}

名称Bean类:

package com.example.demo;

import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

@Component
@Qualifier("name")
public class Name {
    private String Firstname;
    private String Middlename;
    private String Lastname;

    public Name() {
        System.out.println("Name Object created");
    }

    public String getFirstname() {
        return Firstname;
    }
    public void setFirstname(String firstname) {
        Firstname = firstname;
    }
    public String getMiddlename() {
        return Middlename;
    }
    public void setMiddlename(String middlename) {
        Middlename = middlename;
    }
    public String getLastname() {
        return Lastname;
    }
    public void setLastname(String lastname) {
        Lastname = lastname;
    }

    public Name setfullname(String Fname, String Mname, String Lname) {
        Firstname = Fname;
        Middlename = Mname;
        Lastname = Lname;
        return this;
    }

    @Override
    public String toString() {
        return "Name [Firstname=" + Firstname + ", Middlename=" + Middlename + ", Lastname=" + Lastname + "]";
    }

}

PS-

1.)在将私有字段设为public时,代码可以正常工作. 我将这些字段设置为public-id,Subject,name,Firstname,Middlename,Lastname

1.) On making the private fields as public , the code is working fine. I made these fields as public - id , Subject , name, Firstname, Middlename, Lastname

2.)我已经知道,通过在application.properties中添加以下两个内容将为我提供正确的输出: spring.jackson.deserialization.fail-on-unknown-properties = false spring.jackson.mapper.accept-case-insensitive-properties = true

2.) I already know that by adding below two in application.properties wil give me correct output: spring.jackson.deserialization.fail-on-unknown-properties=false spring.jackson.mapper.accept-case-insensitive-properties=true

我只想知道我在哪里做错了.我有公共厕所&各地的二传手

I just want to know where exactly I am doing things wrong. I have public gettters & setters everywhere

推荐答案

重新格式化JSON输入以使用驼峰式大小写键:

Reformat your JSON input to have camel case keys:

{
    "id" :123, 
    "subject" : "English",
    "name": {
    "firstname": "Hemant",
    "middlename": "kumar", 
    "lastname": "Mamod"
    }
}

这篇关于在Springboot中,某些字段未在JSON中解析/反序列化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆