DATAREST-248 - Significant overhaul in entity serialization and deserialization.

Refactored PersistentEntityJackson2Module to move a lot of the customization logic into Bean(De)SerializerModifiers. Those allow to modify the Jackson metadata for a given type programmatically so that we can register the appropriate (de)serializers for associations. 

On the serializing side of things this allows us to easily turn associations into links and simply delegate to object serialization as the delegation will simply ignore the association properties as they have been dropped using the modifier. This solves the advanced requirements of DATAREST-117 nicely as all non-association properties are serialized using standard Jackson means so that all customizations apply.

On the deserialization side, we now support URIs as values for association properties to be able to submit references for non-optional associations on creation.

Related issue: DATAREST-117.
This commit is contained in:
Oliver Gierke
2014-02-19 11:20:43 +01:00
parent cf41d4b692
commit 3e5914d84f
8 changed files with 458 additions and 156 deletions

View File

@@ -1,3 +1,18 @@
/*
* Copyright 2012-2014 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.data.rest.core;
import org.springframework.beans.factory.annotation.Autowired;
@@ -7,7 +22,6 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.data.repository.support.DomainClassConverter;
import org.springframework.data.repository.support.Repositories;
import org.springframework.data.rest.core.UriDomainClassConverter;
import org.springframework.data.rest.core.config.RepositoryRestConfiguration;
import org.springframework.data.rest.core.domain.jpa.ConfiguredPersonRepository;
import org.springframework.data.rest.core.domain.jpa.JpaRepositoryConfig;
@@ -17,6 +31,7 @@ import org.springframework.format.support.DefaultFormattingConversionService;
/**
* @author Jon Brisbin
* @author Oliver Gierke
*/
@Configuration
@Import({ JpaRepositoryConfig.class })
@@ -56,7 +71,7 @@ public class RepositoryTestsConfig {
}
@Bean
public UriDomainClassConverter uriDomainClassConverter() {
return new UriDomainClassConverter(repositories(), domainClassConverter());
public UriToEntityConverter uriToEntityConverter() {
return new UriToEntityConverter(repositories(), domainClassConverter());
}
}