jackson은 @JsonSerialize를 사용하여 BigDecimal을 포맷하여 해결합니다.00 문제 표시 안 함

문제
최근 개발에서 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 포맷에 대한 자세한 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보십시오. 앞으로 많은 응원 부탁드립니다!

좋은 웹페이지 즐겨찾기