Skip to content

Instantly share code, notes, and snippets.

@rsvalerio
Created October 10, 2016 20:19
Show Gist options
  • Save rsvalerio/7e57b2840dcab158bb98d694fd30f118 to your computer and use it in GitHub Desktop.
Save rsvalerio/7e57b2840dcab158bb98d694fd30f118 to your computer and use it in GitHub Desktop.
package com.rsvalerio.spring;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import org.atteo.classindex.ClassIndex;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.embedded.FilterRegistrationBean;
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.data.repository.support.Repositories;
import org.springframework.data.rest.core.config.RepositoryRestConfiguration;
import org.springframework.data.rest.core.event.ValidatingRepositoryEventListener;
import org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration;
import org.springframework.http.MediaType;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
import org.springframework.web.filter.CharacterEncodingFilter;
import java.net.URI;
import java.net.URISyntaxException;
@Configuration
@Import(RepositoryRestMvcConfiguration.class)
public class RestDataConfig extends RepositoryRestMvcConfiguration {
@Autowired
private MessageSource messageSource;
/**
* Configura o Spring-data-rest
* @param config
*/
@Override
protected void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
super.configureRepositoryRestConfiguration(config);
try {
config.setBaseUri(new URI("/api"));
config.setReturnBodyOnCreate(true);
configExposeIds(config);
config.setDefaultMediaType(MediaType.APPLICATION_JSON);
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
/**
* Percorre todos os dominios e configura a exposicao do ID na resposta do Spring-data-rest
* @param config
*/
private void configExposeIds (RepositoryRestConfiguration config) {
for (Class<?> klass : ClassIndex.getPackageClasses("br.com.governa.portalservidor.recadastramento.domain")) {
config.exposeIdsFor(klass);
}
for (Class<?> klass2 : ClassIndex.getPackageClasses("br.com.governa.portalservidor.recadastramento.domain.declaracao")) {
config.exposeIdsFor(klass2);
}
}
@Bean
public LocalValidatorFactoryBean validator() {
LocalValidatorFactoryBean validatorFactoryBean = new LocalValidatorFactoryBean();
validatorFactoryBean.setValidationMessageSource(messageSource);
return validatorFactoryBean;
}
// @Bean
// public Filter characterEncodingFilter() {
// CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
// characterEncodingFilter.setBeanName("characterEncodingFilter");
// characterEncodingFilter.setEncoding("UTF-8");
// return characterEncodingFilter;
// }
@Bean
public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
characterEncodingFilter.setBeanName("characterEncodingFilter");
characterEncodingFilter.setEncoding("UTF-8");
registrationBean.setFilter(characterEncodingFilter);
return registrationBean;
}
/**
* Corrige questao do erro 500, ver: https://jira.spring.io/browse/DATAREST-260
*/
@Bean
@Override
public ValidatingRepositoryEventListener validatingRepositoryEventListener(ObjectFactory<Repositories> repositories) {
ValidatingRepositoryEventListener listener = new ValidatingRepositoryEventListener(repositories);
configureValidatingRepositoryEventListener(listener);
listener.addValidator("afterCreate", validator());
listener.addValidator("beforeCreate", validator());
return listener;
}
@Override
protected void configureJacksonObjectMapper(ObjectMapper objectMapper) {
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment