在Springboot中,某些字段未在JSON中解析/反序列化 [英] Some fields not getting parsed/deserialized in JSON in Springboot
问题描述
我正在使用下面的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屋!