Json Filter and Serializer

package mydto;

import com.fasterxml.jackson.annotation.JsonFilter;

import com.fasterxml.jackson.annotation.JsonIgnore;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties("password")

@JsonFilter("myFilter")

public class MyDto {

private int intValue;

private String name;

private String email;

private String city;

private String province;

private String country;

private String password;

@JsonIgnore

private String secondPassword;

private String descr;

private DtoInfo info;

private Long length;

private Long weight;

public MyDto() {

super();

}

public int getIntValue() {

return intValue;

}

 .......

}

package mydto;

import java.util.Date;

public class DtoInfo {

private String author;

private Date createDt;

private String access;

private String desc;

.....

}

package mydto;

import com.fasterxml.jackson.core.JsonGenerator;

import com.fasterxml.jackson.databind.SerializerProvider;

import com.fasterxml.jackson.databind.ser.BeanPropertyWriter;

import com.fasterxml.jackson.databind.ser.PropertyWriter;

import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;

public class DtoFilter extends SimpleBeanPropertyFilter {

@Override

public void serializeAsField(Object pojo, JsonGenerator jgen, SerializerProvider provider,

PropertyWriter writer) throws Exception {

if (include(writer)) {

if (!writer.getName().equals("intValue")) {

writer.serializeAsField(pojo, jgen, provider);

return;

}

int intValue = ((MyDto) pojo).getIntValue();

if (intValue >= 0) {

writer.serializeAsField(pojo, jgen, provider);

}

} else if (!jgen.canOmitFields()) { // since 2.3

writer.serializeAsOmittedField(pojo, jgen, provider);

}

}

@Override

protected boolean include(BeanPropertyWriter writer) {

return true;

}

@Override

protected boolean include(PropertyWriter writer) {

return true;

}

}

package mydto;

import java.io.IOException;

import com.fasterxml.jackson.core.JsonGenerator;

import com.fasterxml.jackson.core.JsonProcessingException;

import com.fasterxml.jackson.databind.JsonSerializer;

import com.fasterxml.jackson.databind.SerializerProvider;

public class DtoSerializer extends JsonSerializer<MyDto> {

private JsonSerializer<MyDto> defaultSerializer;

public DtoSerializer(JsonSerializer<MyDto> serializer) {

defaultSerializer = serializer;

}

@Override

public void serialize(MyDto dto, JsonGenerator jgen, SerializerProvider provider)

throws IOException, JsonProcessingException {

if("cn".equals(dto.getCountry())) {

dto.setCountry("China");

}

defaultSerializer.serialize(dto, jgen, provider);

}

@Override

public boolean isEmpty(SerializerProvider provider, MyDto value) {

return (value == null );

}

}

package mydto;

import java.io.IOException;

import java.text.SimpleDateFormat;

import java.util.Date;

import com.fasterxml.jackson.core.JsonGenerator;

import com.fasterxml.jackson.core.JsonProcessingException;

import com.fasterxml.jackson.databind.SerializerProvider;

import com.fasterxml.jackson.databind.ser.std.StdSerializer;

public class DtoInfoSerializer extends StdSerializer<DtoInfo> {

private static final long serialVersionUID = 1L;

public DtoInfoSerializer(Class<DtoInfo> dt) {

super(dt);

}

@Override

public void serialize(DtoInfo info, JsonGenerator jgen, SerializerProvider serializers) throws IOException, JsonProcessingException {

if (info != null) {

String pattern = "yyyy-MM-dd HH:mm:ss";

SimpleDateFormat sdf = new SimpleDateFormat(pattern);

if (info.getCreateDt() == null) {

info.setCreateDt(new Date());

}

String formattedDate = sdf.format(info.getCreateDt());

jgen.writeStartObject();

jgen.writeStringField("authorName", info.getAuthor());

jgen.writeStringField("grantedAccess", info.getAccess());

jgen.writeStringField("createDate",formattedDate) ;

jgen.writeEndObject();

}

}

}

package mydto;

import java.util.Date;

import com.fasterxml.jackson.annotation.JsonInclude.Include;

import com.fasterxml.jackson.core.JsonProcessingException;

import com.fasterxml.jackson.databind.BeanDescription;

import com.fasterxml.jackson.databind.JsonSerializer;

import com.fasterxml.jackson.databind.ObjectMapper;

import com.fasterxml.jackson.databind.SerializationConfig;

import com.fasterxml.jackson.databind.module.SimpleModule;

import com.fasterxml.jackson.databind.ser.BeanSerializerModifier;

import com.fasterxml.jackson.databind.ser.FilterProvider;

import com.fasterxml.jackson.databind.ser.PropertyFilter;

import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;

public class MyDtoMain {

public static void main(String[] args) throws JsonProcessingException {

test();

}

public static void test() throws JsonProcessingException {

PropertyFilter theFilter = new DtoFilter();

FilterProvider filters = new SimpleFilterProvider().addFilter("myFilter", theFilter);

MyDto dto = new MyDto();

dto.setIntValue(-1);

dto.setName("BlueSky");

dto.setEmail("bluesky@net.sky");

dto.setPassword("123456");

dto.setPassword("13579x");

dto.setCity("Dalian");

dto.setProvince("LiaoNing");

dto.setCountry("cn");

DtoInfo info=new DtoInfo();

info.setAccess("WRX");

info.setAuthor("admin");

info.setCreateDt(new Date());

dto.setInfo(info);

ObjectMapper mapper = new ObjectMapper();

mapper.setSerializationInclusion(Include.NON_EMPTY);

mapper.registerModule(new SimpleModule().addSerializer(DtoInfo.class, new DtoInfoSerializer(DtoInfo.class)));

mapper.registerModule(new SimpleModule() {

@Override

public void setupModule(SetupContext context) {

super.setupModule(context);

context.addBeanSerializerModifier(new BeanSerializerModifier() {

@Override

public JsonSerializer<?> modifySerializer(

SerializationConfig config, BeanDescription desc, JsonSerializer<?> serializer) {

if (MyDto.class.isAssignableFrom(desc.getBeanClass())) {

return new DtoSerializer((JsonSerializer<MyDto>) serializer);

}

return serializer;

}

});

}

}); 

String dtoAsString = mapper.writer(filters).writeValueAsString(dto);

System.out.println(dtoAsString);

}

}

<think>好的,用户想了解如何使用Realsense与JSON相关的功能或配置。首先,我需要回忆一下之前提供的引用内容,特别是引用[2]和引用[3]中的信息。引用[2]提到通过JSON文件加载预设配置到Realsense设备,而引用[3]则涉及用户部署SR300环境时的经验。 首先,用户可能需要知道如何生成或获取JSON配置文件。Realsense的高级模式允许导出和导入设备参数,这些参数可以保存为JSON文件。需要解释如何通过代码或工具生成这些文件。 其次,用户可能关心如何通过代码加载JSON配置。引用[2]中的代码示例展示了使用C++和rs400::advanced_mode来加载JSON字符串。这里需要详细说明代码的步骤,比如创建管道、配置流、读取文件内容,并检查设备是否支持高级模式。 另外,用户可能想知道JSON配置的具体参数有哪些。需要提到Realsense的文档中有详细的参数说明,例如深度传感器的激光功率、精度模式等,这些都可以在JSON文件中调整。 还有可能涉及如何验证配置是否生效,比如启动管道后检查流信息或使用RealSense Viewer工具手动加载JSON文件进行测试。这部分可以引用[3]中的例子,说明用户可能需要使用官方工具来辅助配置。 最后,用户可能有疑问如何处理常见的错误,比如文件路径不正确或设备不支持高级模式。需要提醒用户检查文件路径和设备型号,确保设备兼容高级模式功能。 总结来说,回答需要分步骤说明如何生成、加载JSON配置,提供代码示例,解释参数内容,并给出验证方法和常见问题解决建议。同时,确保引用相关的内容,如引用[2]中的代码和引用[3]的环境部署经验,以增强答案的可信度。</think>### Realsense JSON配置功能使用指南 Intel RealSense设备支持通过JSON文件进行高级参数配置,主要应用于深度传感器参数预设、流配置优化和硬件模式切换等功能[^2][^3]。 **核心操作步骤:** 1. **生成JSON配置文件** - 通过RealSense Viewer工具调整参数后,点击`Export JSON`生成预设文件 - 或通过代码动态生成配置: ```c++ auto advanced = dev.as<rs400::advanced_mode>(); std::string json_content = advanced.serialize_json(); ``` 2. **加载JSON配置** ```c++ rs2::pipeline pipe; rs2::config cfg; // 设置流配置(必须与JSON中的参数匹配) cfg.enable_stream(RS2_STREAM_DEPTH, 848, 480); std::ifstream file("camera-settings.json"); if (file) { std::string preset( (std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>() ); auto prof = cfg.resolve(pipe); if (auto advanced = prof.get_device().as<rs400::advanced_mode>()) { advanced.load_json(preset); // 加载JSON预设[^2] } } pipe.start(cfg); // 启动带配置的管道 ``` 3. **常用JSON参数示例** ```json { "parameters": { "laser_power": 150, "accuracy": 3, "motion_range": 5, "filter_option": 1 } } ``` **典型应用场景:** - 批量部署相同传感器配置 - 保存/恢复最佳参数组合 - 实现动态参数调整(需配合动态重配置)[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值