下面列出了怎么用com.fasterxml.jackson.databind.PropertyNamingStrategy的API类实例代码及写法,或者点击链接到github查看源代码。
@Test
public void createdInstanceIsIsolatedTest() {
final ObjectMapper first = ModelObjectMapper.createNewObjectMapper();
final ObjectMapper second = ModelObjectMapper.createNewObjectMapper();
// Precondition
assertThat(first).isNotEqualTo(second);
assertThat(first.getPropertyNamingStrategy())
.isEqualTo(second.getPropertyNamingStrategy())
.isNull();
// Do
first.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
// Verify
assertThat(first.getPropertyNamingStrategy())
.isNotEqualTo(second.getPropertyNamingStrategy());
}
private static DivolteConfiguration mapped(final Config input) throws IOException {
final Config resolved = input.resolve();
final ObjectMapper mapper = new ObjectMapper();
// snake_casing
mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
// Ignore unknown stuff in the config
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true);
// Deserialization for Duration
final SimpleModule module = new SimpleModule("Configuration Deserializers");
module.addDeserializer(Duration.class, new DurationDeserializer());
module.addDeserializer(Properties.class, new PropertiesDeserializer());
mapper.registerModules(
new Jdk8Module(), // JDK8 types (Optional, etc.)
new GuavaModule(), // Guava types (immutable collections)
new ParameterNamesModule(), // Support JDK8 parameter name discovery
module // Register custom deserializers module
);
return mapper.readValue(new HoconTreeTraversingParser(resolved.root()), DivolteConfiguration.class);
}
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.
json().
//propertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE).
propertyNamingStrategy(PropertyNamingStrategy.LOWER_CAMEL_CASE).
//featuresToEnable(SerializationFeature.INDENT_OUTPUT).
//featuresToEnable(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY).
build();
SimpleModule module = new SimpleModule();
module.addSerializer(Set.class,
new StdDelegatingSerializer(Set.class, new StdConverter<Set, List>() {
@Override
public List convert(Set value) {
LinkedList list = new LinkedList(value);
Collections.sort(list);
return list;
}
})
);
objectMapper.registerModule(module);
HttpMessageConverter c = new MappingJackson2HttpMessageConverter(
objectMapper
);
converters.add(c);
}
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.
json().
//propertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE).
propertyNamingStrategy(PropertyNamingStrategy.LOWER_CAMEL_CASE).
//featuresToEnable(SerializationFeature.INDENT_OUTPUT).
//featuresToEnable(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY).
build();
SimpleModule module = new SimpleModule();
module.addSerializer(Set.class,
new StdDelegatingSerializer(Set.class, new StdConverter<Set, List>() {
@Override
public List convert(Set value) {
LinkedList list = new LinkedList(value);
Collections.sort(list);
return list;
}
})
);
objectMapper.registerModule(module);
HttpMessageConverter c = new MappingJackson2HttpMessageConverter(
objectMapper
);
converters.add(c);
}
/**
* For use in test.
*/
PatreonAPI(String accessToken, RequestUtil requestUtil) {
this.accessToken = accessToken;
this.requestUtil = requestUtil;
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
objectMapper.configure(com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
this.converter = new ResourceConverter(
objectMapper,
User.class,
Campaign.class,
Pledge.class
);
this.converter.enableDeserializationOption(DeserializationFeature.ALLOW_UNKNOWN_INCLUSIONS);
}
public JacksonJson() {
objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(Include.NON_NULL);
objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
objectMapper.configure(SerializationFeature.WRITE_ENUMS_USING_TO_STRING, true);
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
objectMapper.configure(DeserializationFeature.READ_ENUMS_USING_TO_STRING, true);
SimpleModule module = new SimpleModule("GitLabApiJsonModule");
module.addSerializer(Date.class, new JsonDateSerializer());
module.addDeserializer(Date.class, new JsonDateDeserializer());
objectMapper.registerModule(module);
}
@Override
public QuarkusJsonPlatformDescriptor load(final QuarkusJsonPlatformDescriptorLoaderContext context) {
final QuarkusJsonPlatformDescriptor platform = context
.parseJson(is -> {
try {
ObjectMapper mapper = new ObjectMapper()
.enable(JsonParser.Feature.ALLOW_COMMENTS)
.enable(JsonParser.Feature.ALLOW_NUMERIC_LEADING_ZEROS)
.setPropertyNamingStrategy(PropertyNamingStrategy.KEBAB_CASE);
return mapper.readValue(is, QuarkusJsonPlatformDescriptor.class);
} catch (IOException e) {
throw new RuntimeException("Failed to parse JSON stream", e);
}
});
if (context.getArtifactResolver() != null) {
platform.setManagedDependencies(context.getArtifactResolver().getManagedDependencies(platform.getBomGroupId(),
platform.getBomArtifactId(), null, "pom", platform.getBomVersion()));
}
platform.setResourceLoader(context.getResourceLoader());
platform.setMessageWriter(context.getMessageWriter());
return platform;
}
public Optional<Cluster> createCluster(String name, String region, Map<String, String> args)
throws IOException {
Map<String, String> createOptions = new HashMap<>(args);
createOptions.put(SpydraArgument.OPTION_REGION, region);
List<String> command = Arrays.asList(
"--format=json", "beta", "dataproc", "clusters", "create", name);
StringBuilder outputBuilder = new StringBuilder();
boolean success = ProcessHelper.executeForOutput(
buildCommand(command, createOptions, Collections.emptyList()),
outputBuilder);
String output = outputBuilder.toString();
if (success) {
Cluster cluster = JsonHelper.objectMapper()
.setPropertyNamingStrategy(PropertyNamingStrategy.LOWER_CAMEL_CASE)
.readValue(output, Cluster.class);
return Optional.of(cluster);
} else {
if (output.contains("ALREADY_EXISTS")) {
throw new GcloudClusterAlreadyExistsException(output);
}
LOGGER.error("Dataproc cluster creation call failed. Command line output:");
LOGGER.error(output);
return Optional.empty();
}
}
/**
* Creates properly configured Jackson XML Mapper instances.
* @return XmlMapper instance.
*/
public static XmlMapper newInstance() {
if (instance != null) {
return instance;
}
// Create new mapper
final JacksonXmlModule module = new JacksonXmlModule();
module.setDefaultUseWrapper(false);
module.addDeserializer(ProspectCustomFieldValue.class, new ProspectCustomFieldDeserializer());
final XmlMapper mapper = new XmlMapper(module);
// Configure it
mapper
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE)
.registerModule(new JodaModule())
.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
return mapper;
}
public static BenderConfig load(String filename, String data) {
/*
* Configure Mapper and register polymorphic types
*/
ObjectMapper mapper = BenderConfig.getObjectMapper(filename);
mapper.setPropertyNamingStrategy(
PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES);
/*
* Optionally don't validate the config. Assume user has already
* done this.
*/
String v = System.getenv("BENDER_SKIP_VALIDATE");
if (v != null && v.equals("true")) {
return BenderConfig.load(filename, data, mapper, false);
} else {
return BenderConfig.load(filename, data, mapper, true);
}
}
public void testSnakeCaseNamingStrategy() throws Exception
{
String json = "{\"lower_endpoint\": 12, \"lower_bound_type\": \"CLOSED\", \"upper_endpoint\": 33, \"upper_bound_type\": \"CLOSED\"}";
GuavaModule mod = new GuavaModule().defaultBoundType(BoundType.CLOSED);
ObjectMapper mapper = JsonMapper.builder()
.addModule(mod)
.propertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE)
.build();
@SuppressWarnings("unchecked")
Range<Integer> r = (Range<Integer>) mapper.readValue(json, Range.class);
assertEquals(Integer.valueOf(12), r.lowerEndpoint());
assertEquals(Integer.valueOf(33), r.upperEndpoint());
assertEquals(BoundType.CLOSED, r.lowerBoundType());
assertEquals(BoundType.CLOSED, r.upperBoundType());
}
public void testSnakeCaseNamingStrategy() throws Exception
{
String json = "{\"lower_endpoint\": 12, \"lower_bound_type\": \"CLOSED\", \"upper_endpoint\": 33, \"upper_bound_type\": \"CLOSED\"}";
GuavaModule mod = new GuavaModule().defaultBoundType(BoundType.CLOSED);
ObjectMapper mapper = JsonMapper.builder()
.addModule(mod)
.propertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE)
.build();
@SuppressWarnings("unchecked")
Range<Integer> r = (Range<Integer>) mapper.readValue(json, Range.class);
assertEquals(Integer.valueOf(12), r.lowerEndpoint());
assertEquals(Integer.valueOf(33), r.upperEndpoint());
assertEquals(BoundType.CLOSED, r.lowerBoundType());
assertEquals(BoundType.CLOSED, r.upperBoundType());
}
private static ObjectMapper createDefaultMapper() {
final ObjectMapper om = new HALMapper();
om.setSerializationInclusion(JsonInclude.Include.NON_NULL);
om.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
LOG.info("Created Jackson ObjectMapper");
return om;
}
@Test
void testToObjectListSuccess()
{
jsonUtils = new JsonUtils(PropertyNamingStrategy.SNAKE_CASE);
int expectedSize = 2;
List<TestClass> actualList = jsonUtils.toObjectList(JSON_LIST_STRING, TestClass.class);
assertEquals(actualList.size(), expectedSize);
}
@Test
void testToObjectListInputStreamSuccess()
{
InputStream jsonListStream = new ByteArrayInputStream(JSON_LIST_STRING.getBytes(StandardCharsets.UTF_8));
jsonUtils = new JsonUtils(PropertyNamingStrategy.SNAKE_CASE);
int expectedSize = 2;
List<TestClass> actualList = jsonUtils.toObjectList(jsonListStream, TestClass.class);
assertEquals(actualList.size(), expectedSize);
}
@Test
public void propertyNamingStrategy() {
PropertyNamingStrategy strategy = new PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy();
ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json().propertyNamingStrategy(strategy).build();
assertSame(strategy, objectMapper.getSerializationConfig().getPropertyNamingStrategy());
assertSame(strategy, objectMapper.getDeserializationConfig().getPropertyNamingStrategy());
}
@Test
public void propertyNamingStrategy() {
PropertyNamingStrategy strategy = new PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy();
this.factory.setPropertyNamingStrategy(strategy);
this.factory.afterPropertiesSet();
assertSame(strategy, this.factory.getObject().getSerializationConfig().getPropertyNamingStrategy());
assertSame(strategy, this.factory.getObject().getDeserializationConfig().getPropertyNamingStrategy());
}
private static ObjectMapper createObjectMapper() {
SimpleModule module = new SimpleModule()
.addKeySerializer(NodeResolution.class, new NodeResolutionSerializer())
.addDeserializer(NodeResolution.class, new NodeResolutionDeserializer());
return new ObjectMapper()
.registerModule(module)
.setPropertyNamingStrategy(PropertyNamingStrategy.KEBAB_CASE)
.setSerializationInclusion(Include.NON_EMPTY)
.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
}
/**
* Look-up the given type's {@link JsonNaming} annotation and instantiate the declared {@link PropertyNamingStrategy}.
*
* @param declaringType type declaring fields for which the applicable naming strategy should be looked-up
* @return annotated naming strategy instance (or {@code null})
*/
private PropertyNamingStrategy getAnnotatedNamingStrategy(Class<?> declaringType) {
return Optional.ofNullable(declaringType.getAnnotation(JsonNaming.class))
.map(JsonNaming::value)
.map(strategyType -> {
try {
return strategyType.newInstance();
} catch (InstantiationException | IllegalAccessException ex) {
return null;
}
})
.orElse(null);
}
/**
*
* @param entity 自动拼接实体对象字段
* @param ignoreProperties 动态参数 忽略拼接的字段
* @return sql
*/
public static StringBuilder appendFields(Object entity, String... ignoreProperties) {
StringBuilder sql = new StringBuilder();
List<String> ignoreList = Arrays.asList(ignoreProperties);
try {
sql.append("select ");
for (Field field : entity.getClass().getDeclaredFields()) {
//获取授权
field.setAccessible(true);
String fieldName = field.getName();//属性名称
Object fieldValue = field.get(entity);//属性的值
//非临时字段、非忽略字段
if (!field.isAnnotationPresent(Transient.class) && !ignoreList.contains(fieldName)) {
//拼接查询字段 驼峰属性转下划线
sql.append(new PropertyNamingStrategy.SnakeCaseStrategy().translate(fieldName).toLowerCase()).append(" ").append(",");
}
}
//处理逗号(删除最后一个字符)
sql.deleteCharAt(sql.length() - 1);
String tableName = entity.getClass().getAnnotation(Table.class).name();
sql.append("from ").append(tableName).append(" where '1' = '1' ");
} catch (IllegalAccessException e) {
//输出到日志文件中
log.error(ErrorUtil.errorInfoToString(e));
}
return sql;
}
/** @since 4.3 */
@Override
public PropertyNamingStrategy namingStrategyInstance(MapperConfig<?> config,
Annotated annotated, Class<?> implClass) {
return (PropertyNamingStrategy) this.beanFactory.createBean(implClass);
}
@Test
public void propertyNamingStrategy() {
PropertyNamingStrategy strategy = new PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy();
ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json().propertyNamingStrategy(strategy).build();
assertSame(strategy, objectMapper.getSerializationConfig().getPropertyNamingStrategy());
assertSame(strategy, objectMapper.getDeserializationConfig().getPropertyNamingStrategy());
}
@Test
public void propertyNamingStrategy() {
PropertyNamingStrategy strategy = new PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy();
this.factory.setPropertyNamingStrategy(strategy);
this.factory.afterPropertiesSet();
assertSame(strategy, this.factory.getObject().getSerializationConfig().getPropertyNamingStrategy());
assertSame(strategy, this.factory.getObject().getDeserializationConfig().getPropertyNamingStrategy());
}
@Inject
public InfluxV9AlarmRepo(
final Environment env,
final InfluxV9RepoWriter influxV9RepoWriter) {
super(env);
this.influxV9RepoWriter = influxV9RepoWriter;
this.objectMapper.setPropertyNamingStrategy(
PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES);
}
@Bean
CodeParseInvoke codeParseInvoke() {
ObjectMapper mapper = new ObjectMapper();
mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(codeParseUrl)
.addConverterFactory(JacksonConverterFactory.create(mapper))
.build();
return retrofit.create(CodeParseInvoke.class);
}
/**
* Creates a default json mapper.
*
* @param strategy property naming strategy
* @return object mapper
*/
@NonNull
public static ObjectMapper createDefaultJsonMapper(@Nullable PropertyNamingStrategy strategy) {
// Create object mapper
ObjectMapper mapper = new ObjectMapper();
// Configure
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
// Set property naming strategy
if (strategy != null) {
mapper.setPropertyNamingStrategy(strategy);
}
return mapper;
}
private ObjectMapper getMapper(boolean yaml) {
if (yaml) {
YAMLFactory yf = new YAMLFactory();
return new ObjectMapper(yf)
.setPropertyNamingStrategy(PropertyNamingStrategy.KEBAB_CASE);
} else {
return new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT)
.enable(JsonParser.Feature.ALLOW_COMMENTS).enable(JsonParser.Feature.ALLOW_NUMERIC_LEADING_ZEROS)
.setPropertyNamingStrategy(PropertyNamingStrategy.KEBAB_CASE);
}
}
private ObjectMapper getMapper(boolean yaml) {
if (yaml) {
YAMLFactory yf = new YAMLFactory();
return new ObjectMapper(yf)
.setPropertyNamingStrategy(PropertyNamingStrategy.KEBAB_CASE);
} else {
return new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT)
.enable(JsonParser.Feature.ALLOW_COMMENTS).enable(JsonParser.Feature.ALLOW_NUMERIC_LEADING_ZEROS)
.setPropertyNamingStrategy(PropertyNamingStrategy.KEBAB_CASE);
}
}
/**
* Provides the serialization configurations required by the Eureka Server. JSON
* content exchanged with eureka requires a root node matching the entity being
* serialized or deserialized. Achived with
* {@link SerializationFeature#WRAP_ROOT_VALUE} and
* {@link DeserializationFeature#UNWRAP_ROOT_VALUE}.
* {@link PropertyNamingStrategy.SnakeCaseStrategy} is applied to the underlying
* {@link ObjectMapper}.
* @return a {@link MappingJackson2HttpMessageConverter} object
*/
public MappingJackson2HttpMessageConverter mappingJacksonHttpMessageConverter() {
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setObjectMapper(new ObjectMapper()
.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE));
SimpleModule jsonModule = new SimpleModule();
jsonModule.setSerializerModifier(createJsonSerializerModifier()); // keyFormatter,
// compact));
converter.getObjectMapper().registerModule(jsonModule);
converter.getObjectMapper().configure(SerializationFeature.WRAP_ROOT_VALUE, true);
converter.getObjectMapper().configure(DeserializationFeature.UNWRAP_ROOT_VALUE,
true);
converter.getObjectMapper().addMixIn(Applications.class,
ApplicationsJsonMixIn.class);
converter.getObjectMapper().addMixIn(InstanceInfo.class,
InstanceInfoJsonMixIn.class);
// converter.getObjectMapper().addMixIn(DataCenterInfo.class,
// DataCenterInfoXmlMixIn.class);
// converter.getObjectMapper().addMixIn(InstanceInfo.PortWrapper.class,
// PortWrapperXmlMixIn.class);
// converter.getObjectMapper().addMixIn(Application.class,
// ApplicationXmlMixIn.class);
// converter.getObjectMapper().addMixIn(Applications.class,
// ApplicationsXmlMixIn.class);
return converter;
}
static ObjectMapper createObjectMapper() {
final ObjectMapper mapper = new ObjectMapper();
mapper.setPropertyNamingStrategy(PropertyNamingStrategy.KEBAB_CASE);
mapper.setSerializationInclusion(JsonInclude.Include.ALWAYS);
// disabled features:
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
return mapper;
}