JSON 使用 Jackson 在 REST API 中与 Spring Boot 实现
原文:https://www . geesforgeks . org/JSON-using-Jackson-in-rest-API-implementation-with-spring-boot/
每当我们用 Spring (Spring Boot) 实现 REST API 时,我们都会遇到在 API 的 JSON 响应中排除空值的要求。此外,可能需要将打开/关闭此功能具体化:在 JSON 响应中排除空值,从而允许应用编程接口的使用者根据需要进行定制。
在本文中,我们总结了使用 Jackson 实现上述特性的 ON/OFF 外部化的方法,Jackson 是一个基于 java 的库,用于将 java 对象序列化或映射到 JSON,反之亦然。
不成功的方法:
最初,我们尝试了 Spring Boot 现成的方法,但没有成功,例如:
- 在应用程序中具有属性。该属性取值为:始终 / 非空 / 非空 / 非默认 / 非空。**
- 扩展WebMvcConfigurationSupport类并定制 Spring Boot 配置,见下文。
Java 语言(一种计算机语言,尤用于创建网站)
@Configuration
class WebMvcConfiguration extends WebMvcConfiguration{
@Override
protected void extendsMessageConverters
(List<HttpMessageConverter<?>> converters)
{
for(HttpMessageConverter<?> converter: converters)
{
if(converter instnceof MappingJackson2HttpMessageConverter)
{
ObjectMapper mapper =
((MappingJackson2HttpMessageConverter)converter)
.getObjectMapper();
mapper.setSerializationInclusion(Include.NON_NULL);
}
}
}
现在,创建一个实例org . spring framework . http . converter . JSON . Jackson 2 objectmapperbuilder customizer,下面给出的代码供大家参考。
Java
@Bean
Public Jackson2ObjectMapperBuilderCustomizer customJackson(){
return new Jackson2ObjectMapperBuilderCustomizer(){
@Override
public void customize(Jackson2ObjectMapperBuilder builder){
builder.serializationInclusion(Include.NON_NULL);
builder.failonUnknownProperties(false);
}
};
}
成功进场:
创建一个 JSON 响应对象,如果没有创建的话。这是在序列化为 JSON 时,基于 应用程序中的属性,您想要“ 排除/包含空字段 特征的对象。您可以在下面看到响应对象,以供参考。
Java
***public class RegistrationResponse{
@JsonProperty("success")
private Boolean success = null;
@JsonProperty("message")
private String message = null;
@JsonProperty("data")
private String data = null;
@JsonProperty("error_code")
private Integer errorCode = null;
public RegistrationResponse success(Boolean success){
this.success = success;
return this;
}
@NotNull
public Boolean isSuccess(){
return success;
}
public void setSuccess(Boolean success){
this.success = success;
}
public RegistrationResponse message(String message){
this.message = message;
return this;
}
@NotNull
public String getMessage(){
return message;
}
public void setMessage(String message){
this.message = message;
}***
创建一个名为“config . response . JSON . format . exclude _ null”的属性,该属性可以将值取为“ 【真】 ”或“ 【假】 ”。值“ 为真 表示在 JSON 响应中排除空字段&值“ 为假 表示不排除空字段。此外,将此属性绑定到类级属性,以便可以读取该值。下面给出的代码供您参考。
config.response.json.format.exclude_null = false
@Value("${config.response.json.format.exclude_null}")
private boolean toExcludeNull;
通过创建 的实例来实现基于全局属性值排除空值的实际逻辑。
* Set the serialized inclusion attribute of the created mapper to inclusion. Not blank If the global attribute value is true, otherwise it is set to inclusive. Always . Serialize the response object into a string using the mapper & return the string. Ensure that JsonProcessingException is handled.*
让我们看看下面作为 API 实现的一部分构建 JSON 响应时要添加的实际代码片段。
爪哇
RegistrationResponse regResp = new RegistrationResponse();
regResp.setSuccess(true);
regResp.setErrorCode(null);
regResp.setData("testdata");
regResp.setMessage("success");
ObjectMapper mapper = new ObjectMapper()
mapper.enable(SerializationFeature.INDENT_OUTPUT);
if(toExcludeNull) mapper.setSerializationInclusion(Include.NON_NULL);
else mapper.serializationInclusion(Include.ALWAYS);
String regRespStr = null;
try{
regRespStr = mapper.writeValueAsString(regResp);
}
catch(JsonProcessingException e)
e.printStackTrace();
}
System.out.println("Formatted JSON Response:" + regRespStr);
这里,是应用了空排除/包含的 JSON 字符串。
也可以查看 Github 资源库。
版权属于:月萌API www.moonapi.com,转载请注明出处