@JsonInclude(Include.NON_NULL)
SpringBoot에서 Json의 직렬화 및 역직렬화 문제를 해결하는 방법
json 직렬화/역직렬화 제어
1. @JsonIgnoreProperties
@JsonIgnoreProperties(value = { "prop1","prop2" })
사용은 Pojo 클래스를 수정하고 직렬화 및 역직렬화 중에 지정된 속성을 무시하는 데 사용됩니다.
@JsonIgnoreProperties(ignoreUnknown = true)
Pojo를 수정하는 데 사용됩니다. 클래스, 생성자에서 설정할 수 없고 해당 setter 메서드가 없는 속성을 포함하여 역직렬화 중에 설정할 수 없는 속성을 무시합니다.
2. @JsonProperty 주석
json 필드의 이름이 Pojo와 동일한 경우 속성 이름이 일관되지 않으면 @JsonProperty를 사용하여 getter() 또는 setter() 메서드에 주석을 달 수 있습니다. 이 주석은 json에 해당하는 속성 이름을 설정합니다. 또한 @JsonProperty는 생성자의 형식 매개변수에 주석을 달기 위해 자주 사용됩니다. 이 경우 생성자 @JsonCreator 주석을 추가해야 합니다.
3. @JsonCreator 주석
Pojo 클래스가 매개변수가 있는 생성자를 정의하지만 매개변수 없는 생성자를 제공하지 않으면 역직렬화 중에 오류가 보고됩니다. 두 가지 방법:
방법 1: 매개변수 없는 생성자 추가
방법 2: 이 매개변수화된 생성자에 @JsonCreator 주석을 추가하고 매개변수에 @JsonProperty.
4로 주석을 달아야 합니다. @JsonGetter를 사용한 주석
json 필드의 이름이 Pojo의 속성 이름과 일치하지 않는 경우 @JsonGetter를 사용하여 getter()에 주석을 달고 @JsonSetter를 사용하여 setter() 메서드에 주석을 달 수 있습니다. 속성 이름을 지정합니다. 이 두 주석은 모두 @JsonProperty.
5로 대체될 수 있습니다. @JsonAnySetter 주석
브랜드/가격과 같은 속성이 있는 Car 객체와 같은 일반 객체 속성 이름은 결정됩니다. 때로는 Car 객체가 일부 확장 속성을 설정해야 합니다. 이러한 확장 속성의 이름은 일반적으로 이러한 확장 속성의 K/V를 json 데이터에 저장하는 데 사용됩니다. Map에서는 K/V setter 메서드를 클래스에 추가해야 하며 이 setter 메서드에는 @JsonAnySetter라는 주석을 달아야 합니다.
public class Car { public String brand; private Map<String, String> properties; @JsonAnySetter public void add(String key, String value) { properties.put(key, value); } }
클래스에 @JsonAnySetter가 추가되면 다음 json이 생성됩니다. 데이터는 Map으로 역직렬화될 수 있습니다:
{ "brand":"Benz", "attr2":"val2", "attr1":"val1" }
6. @JsonAnyGetter 주석
은 @JsonAnySetter 주석에 해당합니다. 클래스의 Map K/V 속성을 json으로 직렬화하려면 @JsonAnyGetter를 추가해야 합니다.
public class Car { public String brand; private Map<String, String> properties; @JsonAnyGetter public Map<String, String> getProperties() { return properties; } }
직렬화된 json은
{ "brand":"Benz", "attr2":"val2", "attr1":"val1" }
7입니다. @JsonFormat 주석
일반적으로 날짜/시간 속성의 직렬화에 사용되는 시간 형식을 지웁니다.
public class Event { public String name; @JsonFormat( shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy hh:mm:ss") public Date eventDate; }
8. @JsonSerialize 및 @JsonDeserialize 주석
@ JsonSerialize 주석은 클래스 속성에 대한 특수 직렬화 기능을 설정할 수 있으며 @JsonDeserialize 주석은 json 속성에 대한 역직렬화 기능을 사용자 정의하는 데 사용됩니다
SpringBoot 직렬화 규칙
포함 .Include.ALWAYS
기본Include.Include.ALWAYS
默认Include.NON_DEFAULT
属性为默认值不序列化Include.NON_EMPTY
属性为 空(“”) 或者为 NULL 都不序列化Include.NON_NULL
Include.NON_DEFAULT
속성은 기본값이며 직렬화되지 않습니다.Include.NON_EMPTY
속성은 다음과 같습니다. 비어 있음("") 또는 NULL이고 직렬화되지 않았습니다. Include.NON_NULL
속성이 NULL이고 직렬화되지 않았습니다1. 전역 설정 /** * 〈返回json空值去掉null和""〉 〈功能详细描述〉 * * @author gogym * @version 2017年10月13日 * @see JacksonConfig * @since */ @Configuration public class JacksonConfig { @Bean @Primary @ConditionalOnMissingBean(ObjectMapper.class) public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) { ObjectMapper objectMapper = builder.createXmlMapper(false).build(); // 通过该方法对mapper对象进行设置,所有序列化的对象都将按改规则进行系列化 // Include.Include.ALWAYS 默认 // Include.NON_DEFAULT 属性为默认值不序列化 // Include.NON_EMPTY 属性为 空("") 或者为 NULL 都不序列化,则返回的json是没有这个字段的。这样对移动端会更省流量 // Include.NON_NULL 属性为NULL 不序列化,就是为null的字段不参加序列化 //objectMapper.setSerializationInclusion(Include.NON_EMPTY); objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY); return objectMapper; } }
spring.jackson.default-property-inclusion=non_null spring: jackson: default-property-inclusion: non_null
@JsonInclude(Include.NON_NULL)
로그인 후 복사
3. 로컬 직렬화 사용자 정의(1) StdSerializer@JsonInclude(Include.NON_NULL)
public class ClientObjectSerialize extends JsonSerializer<CreditBorrowerRepaymentRequestDto>{ @Override public void serialize(CreditBorrowerRepaymentRequestDto dto, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException { jsonGenerator.writeStartObject(); try { Field[] fields = dto.getClass().getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); if(null == field.get(dto)){ continue; } jsonGenerator.writeFieldName(field.getName()); jsonGenerator.writeObject(field.get(dto)); } } catch (Exception e) { e.printStackTrace(); } jsonGenerator.writeEndObject(); } }
@JsonSerialize(using = ClientObjectSerialize.class) public class CreditBorrowerRepaymentRequestDto{ }
@JsonSerialize(using = ClientStringSerialize.class) private String name; @JsonSerialize(using = ClientDtaeSerialize.class) private Date date; public class ClientStringSerialize extends JsonSerializer<String> { @Override public void serialize(String string, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { if(string == null){ jsonGenerator.writeString(string + "[NULL]"); }else{ jsonGenerator.writeString(string); } } } public class ClientDtaeSerialize extends JsonSerializer<Date> { @Override public void serialize(Date createDate, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeString(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(createDate)); } }
(1)사용자 정의 null 값 직렬 변환기
🎜import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import java.io.IOException; /** * 自定义null值序列化处理器 */ public class CustomizeNullJsonSerializer { /** * 处理数组集合类型的null值 */ public static class NullArrayJsonSerializer extends JsonSerializer<Object> { @Override public void serialize(Object value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeStartArray(); jsonGenerator.writeEndArray(); } } /** * 处理字符串类型的null值 */ public static class NullStringJsonSerializer extends JsonSerializer<Object> { @Override public void serialize(Object value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeString(""); } } /** * 处理数值类型的null值 */ public static class NullNumberJsonSerializer extends JsonSerializer<Object> { @Override public void serialize(Object value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeNumber(0); } } /** * 处理boolean类型的null值 */ public static class NullBooleanJsonSerializer extends JsonSerializer<Object> { @Override public void serialize(Object value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeBoolean(false); } } /** * 处理实体对象类型的null值 */ public static class NullObjectJsonSerializer extends JsonSerializer<Object> { @Override public void serialize(Object value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeStartObject(); jsonGenerator.writeEndObject(); } } }
import com.fasterxml.jackson.databind.BeanDescription; import com.fasterxml.jackson.databind.SerializationConfig; import com.fasterxml.jackson.databind.ser.BeanPropertyWriter; import com.fasterxml.jackson.databind.ser.BeanSerializerModifier; import java.util.Collection; import java.util.List; /** * <pre class="brush:php;toolbar:false"> * 此modifier主要做的事情为: * 1.当序列化类型为数组集合时,当值为null时,序列化成[] * 2.String类型值序列化为"" * **/ public class MyBeanSerializerModifier extends BeanSerializerModifier { @Override public List
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializerProvider; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; /** * 配置Jackson实体 */ @Configuration public class JacksonConfig { @Bean @Primary @ConditionalOnMissingBean(ObjectMapper.class) public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) { ObjectMapper objectMapper = builder.createXmlMapper(false).build(); /** 为objectMapper注册一个带有SerializerModifier的Factory */ objectMapper.setSerializerFactory(objectMapper.getSerializerFactory() .withSerializerModifier(new MyBeanSerializerModifier())); SerializerProvider serializerProvider = objectMapper.getSerializerProvider(); serializerProvider.setNullValueSerializer(new CustomizeNullJsonSerializer .NullObjectJsonSerializer()); return objectMapper; } }
위 내용은 SpringBoot에서 Json의 직렬화 및 역직렬화 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











golangWebSocket과 JSON의 결합: 데이터 전송과 파싱의 실현 현대 웹 개발에서 실시간 데이터 전송은 점점 더 중요해지고 있습니다. WebSocket은 양방향 통신을 달성하는 데 사용되는 프로토콜입니다. 기존 HTTP 요청-응답 모델과 달리 WebSocket을 사용하면 서버가 클라이언트에 데이터를 적극적으로 푸시할 수 있습니다. JSON(JavaScriptObjectNotation)은 간결하고 읽기 쉬운 데이터 교환을 위한 경량 형식입니다.

SpringBoot와 SpringMVC는 모두 Java 개발에서 일반적으로 사용되는 프레임워크이지만 둘 사이에는 몇 가지 분명한 차이점이 있습니다. 이 기사에서는 이 두 프레임워크의 기능과 용도를 살펴보고 차이점을 비교할 것입니다. 먼저 SpringBoot에 대해 알아봅시다. SpringBoot는 Spring 프레임워크를 기반으로 하는 애플리케이션의 생성 및 배포를 단순화하기 위해 Pivotal 팀에서 개발되었습니다. 독립 실행형 실행 파일을 구축하는 빠르고 가벼운 방법을 제공합니다.

MySQL5.7과 MySQL8.0은 서로 다른 두 가지 MySQL 데이터베이스 버전입니다. 두 버전 사이에는 몇 가지 주요 차이점이 있습니다. 성능 개선: MySQL8.0은 MySQL5.7에 비해 성능이 일부 향상되었습니다. 여기에는 더 나은 쿼리 최적화 프로그램, 더 효율적인 쿼리 실행 계획 생성, 더 나은 인덱싱 알고리즘 및 병렬 쿼리 등이 포함됩니다. 이러한 개선 사항은 쿼리 성능과 전반적인 시스템 성능을 향상시킬 수 있습니다. JSON 지원: MySQL 8.0에는 JSON 데이터의 저장, 쿼리 및 인덱싱을 포함하여 JSON 데이터 유형에 대한 기본 지원이 도입되었습니다. 이를 통해 MySQL에서 JSON 데이터를 보다 편리하고 효율적으로 처리하고 조작할 수 있습니다. 트랜잭션 기능: MySQL8.0은 원자와 같은 몇 가지 새로운 트랜잭션 기능을 도입합니다.

PHP 배열을 JSON으로 변환하기 위한 성능 최적화 방법은 다음과 같습니다. JSON 확장 및 json_encode() 함수를 사용하여 문자 이스케이프를 방지하고 버퍼를 사용하여 JSON 인코딩 결과 캐싱을 고려합니다. JSON 인코딩 라이브러리.

Golang에서 json.MarshalIndent 함수를 사용하여 구조를 형식화된 JSON 문자열로 변환합니다. Golang에서 프로그램을 작성할 때 구조를 JSON 문자열로 변환해야 하는 경우가 종종 있습니다. 이 과정에서 json.MarshalIndent 함수가 도움이 될 수 있습니다. 포맷된 출력. 아래에서는 이 기능을 사용하는 방법을 자세히 설명하고 구체적인 코드 예제를 제공합니다. 먼저 일부 데이터가 포함된 구조를 만들어 보겠습니다. 다음은 표시입니다

빠른 시작: JSON 파일을 읽는 Pandas 방법, 특정 코드 예제가 필요합니다. 소개: 데이터 분석 및 데이터 과학 분야에서 Pandas는 중요한 Python 라이브러리 중 하나입니다. 풍부한 기능과 유연한 데이터 구조를 제공하며, 다양한 데이터를 쉽게 처리하고 분석할 수 있습니다. 실제 애플리케이션에서는 JSON 파일을 읽어야 하는 상황에 자주 직면합니다. 이 기사에서는 Pandas를 사용하여 JSON 파일을 읽고 특정 코드 예제를 첨부하는 방법을 소개합니다. 1. 팬더 설치

Jackson 라이브러리의 주석은 JSON 직렬화 및 역직렬화를 제어합니다. 직렬화: @JsonIgnore: 속성 무시 @JsonProperty: 이름 지정 @JsonGetter: get 메서드 사용 @JsonSetter: set 메서드 사용 역직렬화: @JsonIgnoreProperties: @JsonProperty 속성 무시: 이름 지정 @JsonCreator: 생성자 사용 @JsonDeserialize: 사용자 정의 논리

PHP의 json_encode() 함수를 사용하여 배열이나 객체를 JSON 문자열로 변환하고 출력 형식을 지정하면 다양한 플랫폼과 언어 간에 데이터를 더 쉽게 전송하고 교환할 수 있습니다. 이 기사에서는 json_encode() 함수의 기본 사용법과 JSON 문자열의 형식을 지정하고 출력하는 방법을 소개합니다. 1. json_encode() 함수의 기본 사용법 json_encode() 함수의 기본 구문은 다음과 같습니다. stringjson_encod
