Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion documentation/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<groupId>tools.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<scope>test</scope>
</dependency>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,42 +4,75 @@
*/
package org.hibernate.validator.referenceguide.chapter12.nodenameprovider;

//tag::include[]
import org.hibernate.validator.spi.nodenameprovider.JavaBeanProperty;
import org.hibernate.validator.spi.nodenameprovider.Property;
import org.hibernate.validator.spi.nodenameprovider.PropertyNodeNameProvider;

import com.fasterxml.jackson.databind.BeanDescription;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition;
import tools.jackson.core.JacksonException;
import tools.jackson.databind.BeanProperty;
import tools.jackson.databind.JavaType;
import tools.jackson.databind.ObjectMapper;
import tools.jackson.databind.jsonFormatVisitors.JsonFormatVisitorWrapper;
import tools.jackson.databind.jsonFormatVisitors.JsonObjectFormatVisitor;

//tag::include[]

public class JacksonPropertyNodeNameProvider implements PropertyNodeNameProvider {
private final ObjectMapper objectMapper = new ObjectMapper();

@Override
public String getName(Property property) {
if ( property instanceof JavaBeanProperty ) {
return getJavaBeanPropertyName( (JavaBeanProperty) property );
if (property instanceof JavaBeanProperty javaBeanProperty) {
var visitor = new JsonPropertyNameGetter(javaBeanProperty.getMemberName());
try {
objectMapper.acceptJsonFormatVisitor(
javaBeanProperty.getDeclaringClass(),
visitor
);
var attributeName = visitor.getAttributeName();
return attributeName != null ? attributeName : property.getName();
} catch (JacksonException ignored) {}
}

return getDefaultName( property );
return property.getName();
}

private String getJavaBeanPropertyName(JavaBeanProperty property) {
JavaType type = objectMapper.constructType( property.getDeclaringClass() );
BeanDescription desc = objectMapper.getSerializationConfig().introspect( type );
// Visitor wrapper
private static class JsonPropertyNameGetter extends JsonFormatVisitorWrapper.Base {

return desc.findProperties()
.stream()
.filter( prop -> prop.getInternalName().equals( property.getName() ) )
.map( BeanPropertyDefinition::getName )
.findFirst()
.orElse( property.getName() );
}
private final JsonObjectFormatVisitor visitor;
private String attributeName = null;

JsonPropertyNameGetter(String memberName) {
this.visitor = new JsonObjectFormatVisitor.Base() {

@Override
public void property(BeanProperty prop) {
setAttributeName(prop);
}

@Override
public void optionalProperty(BeanProperty prop) {
setAttributeName(prop);
}

private void setAttributeName(BeanProperty writer) {
if (memberName.equalsIgnoreCase(writer.getMember().getName())) {
attributeName = writer.getName();
}
}
};
}

public String getAttributeName() {
return attributeName;
}

@Override
public JsonObjectFormatVisitor expectObjectFormat(JavaType type) {
return visitor;
}

private String getDefaultName(Property property) {
return property.getName();
}

}
//end::include[]
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,15 @@

import org.junit.Test;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import tools.jackson.core.JacksonException;
import tools.jackson.databind.ObjectMapper;

//tag::include[]
public class PersonSerializationTest {
private final ObjectMapper objectMapper = new ObjectMapper();

@Test
public void personIsSerialized() throws JsonProcessingException {
public void personIsSerialized() throws JacksonException {
Person person = new Person( "Clark", "Kent" );

String serializedPerson = objectMapper.writeValueAsString( person );
Expand Down
2 changes: 1 addition & 1 deletion engine/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<groupId>tools.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<scope>test</scope>
</dependency>
Expand Down
18 changes: 6 additions & 12 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -201,8 +201,7 @@
<version.com.google.guava>33.5.0-jre</version.com.google.guava>
<version.org.springframework.spring-expression>7.0.2</version.org.springframework.spring-expression>
<version.org.jboss.arquillian.container.arquillian-weld-embedded>4.0.0.Final</version.org.jboss.arquillian.container.arquillian-weld-embedded>
<version.com.fasterxml.jackson.core.jackson-databind>2.20.1</version.com.fasterxml.jackson.core.jackson-databind>
<version.com.fasterxml.jackson.core.jackson-annotations>2.20</version.com.fasterxml.jackson.core.jackson-annotations>
<version.tools.jackson.core.jackson-bom>3.0.3</version.tools.jackson.core.jackson-bom>
<version.net.bytebuddy.byte-buddy>1.18.2</version.net.bytebuddy.byte-buddy>

<!-- OSGi dependencies -->
Expand Down Expand Up @@ -644,16 +643,11 @@
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${version.com.fasterxml.jackson.core.jackson-databind}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${version.com.fasterxml.jackson.core.jackson-annotations}</version>
<scope>test</scope>
<groupId>tools.jackson</groupId>
<artifactId>jackson-bom</artifactId>
<type>pom</type>
<scope>import</scope>
<version>${version.tools.jackson.core.jackson-bom}</version>
</dependency>
<dependency>
<groupId>javax.inject</groupId>
Expand Down
Loading