【问题描述】: 返回的json 需要浮点型的数据,但现在返回的数据带有双引号
【期望】: 前端需要下面这种数据
【解决方案】:
1.引入依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.5</version>
</dependency>
2.写配置类
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import org.springframework.context.annotation.Configuration;
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;
@Configuration
public class JacksonConfig {
public static JsonNode getObjectMapper(String json) {
ObjectMapper objectMapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
// 注册自定义的序列化器
module.addSerializer(BigDecimal.class, new BigDecimalToDoubleSerializer());
objectMapper.registerModule(module);
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
try {
// 将传入的字符串解析为 JSONObject
return objectMapper.readTree(json);
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
// 自定义的序列化器,用于将 BigDecimal 转换为 Double
public static class BigDecimalToDoubleSerializer extends JsonSerializer<BigDecimal> {
@Override
public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeNumber(value.doubleValue());
}
}
}
3.调用例子
// 获取JSONObject
JSONObject json = testService.getJson();
JsonNode node = null;
try{
node = JacksonConfig.getObjectMapper(json.toJSONString());
}catch (Exception e){
logger.error("JacksonConfig.getObjectMapper()转换失败",e);
}
return R.ok().put("result", node);