jackson은 @JsonSerialize를 사용하여 BigDecimal을 포맷하여 해결합니다.00 문제 표시 안 함
3021 단어 jackson@JsonSerializeBigDecimal
최근 개발에서 BigDecimal이라는 데이터 형식을 사용하여 json 데이터를 되돌릴 때 문제가 발생했습니다.
# 1.
240.00
240.77
# 2. mysql ( )
240
240.77
# 3. java :
240.00
240.77
# 4. json :
240
240.77
# 4. json :
240.00
240.77
위의 일련의 분석을 통해 알 수 있듯이 이 근원을 해결하려면 json 데이터를 되돌릴 때 데이터를 포맷해야 한다.2. 해결 방안: @JsonSerialize 출력 데이터로 두 개의 소수점 보존
단계 1.BigDecimal 포맷 도구 만들기
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
import java.math.BigDecimal;
public class BigDecimalSerialize extends JsonSerializer<BigDecimal> {
@Override
public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializerProvider) throws IOException {
if (value != null && !"".equals(value)) {
gen.writeString(value.setScale(2, BigDecimal.ROUND_HALF_DOWN) + "");
} else {
gen.writeString(value + "");
}
}
}
단계 2: 반환된 엔티티 클래스에 해당하는 속성에 메모를 추가합니다.
@JsonSerialize(using = BigDecimalSerialize.class)
private BigDecimal totalCost;
총결산이 방안은 json의 날짜 형식, String 형식을 통일적으로 해결할 수 있습니다.더블 타입...등등의 서열화 형식 문제
확장: @JsonSerialize 올바른 사용
실제 개발에서 우리는 반드시 이런 문제에 부딪힌 적이 있다. 프런트엔드 디스플레이와 백엔드 저장 데이터 단위가 통일되지 않고 각자의 이유가 있기 때문에 통일되지 않으면 백엔드에서만 전환할 수 있다.매번 전단으로 돌아갈 때 다시 한 번 변환하고 전단으로 돌아가는 json 데이터는 백엔드에서 정의된 대상은 왕왕 하나의 대상이다. 어떻게 우아한 변환을 할 수 있을까?2단계 조작: 1.전환을 책임지는 종류를 하나 쓰고, 그 안에 규칙을 잘 쓰다
public class MySerializerUtils extends JsonSerializer<Integer> {
@Override
public void serialize(Integer status, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
String statusStr = "";
switch (status) {
case 0:
statusStr = " ";
break;
case 1:
statusStr = " ";
break;
case 2:
statusStr = " ";
break;
case 3:
statusStr = " ";
break;
case 4:
statusStr = " ";
break;
default:
statusStr = " ";
}
jsonGenerator.writeString(statusStr);
}
}
2. 실체 클래스에서 바꿔야 할 필드에 주석을 달기
/**
*
*/
@JsonSerialize(using = MySerializerUtils.class)
private int status;
주: @JsonSerialize 주석은 주로 데이터 변환에 응용되며, 이 주석은 이 속성의 getter () 방법에 작용한다.이 글은 jackson이 @Json Serialize를 사용하여 BigDecimal을 포맷하는 것에 관한 것입니다.○ 문제를 표시하지 않은 글은 여기까지 소개합니다. jackson @Json Serialize의 Big Decimal 포맷에 대한 자세한 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보십시오. 앞으로 많은 응원 부탁드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Spring Boot에서 json Date/LocalDateTime/LocalDate 형식 지정Spring Boot는 기본적으로 을 사용하여 json 데이터를 직렬화, 역직렬화합니다. 기본적으로 Jackson은 객체를 타임스탬프로 직렬화합니다Date. LocalDateTime , LocalDate 객체에 대해...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.