2015-02-28 2 views
0

Я пишу webserivce, используя Spring 4. У меня проблема с привязкой данных. У меня есть исключение org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'java.util.ArrayList' to required type 'java.util.Set' for property 'groups'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [pl.tt.springtpl.models.Group] for property 'groups[0]': no matching editors or conversion strategy found. Я отправляю объект в json. В сервисе I привязывающие свойства полученной карты к сущности. Все нормально, если свойства примитивны. Но если у меня есть обычное pojo, у меня есть это исключение.Spring 4 Converters

Я написал два класса:

public class ArrayListToSetConverter implements Converter<ArrayList, Set>{ 

    public Set convert(ArrayList source) { 
     Set set = new HashSet(); 
     set.addAll(source); 
     return set; 
    } 

} 

, и я пытаюсь сделать это более общий с этим классом:

public class StringToAbstractEntityConverter implements ConditionalGenericConverter{ 

    public Set<ConvertiblePair> getConvertibleTypes() { 
     ConvertiblePair cp = new ConvertiblePair(String.class, SimpleAbstractEntity.class); 
     Set<ConvertiblePair> set = new HashSet<ConvertiblePair>(); 
     set.add(cp); 
     return set; 
    } 

    public Object convert(Object o, TypeDescriptor td, TypeDescriptor td1) { 
     Object w = td.getClass(); 
     return o; 
    } 

    public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) { 
     if(sourceType.getObjectType() == String.class && targetType.isAssignableTo(TypeDescriptor.valueOf(SimpleAbstractEntity.class))){ 
      String idAsTxt = (String)sourceType.getSource(); 
      long id = Long.valueOf(idAsTxt); 
     } 

     return true; 
    } 
} 

Я добавить строку в классе @Configuration:

@Override 
public FormattingConversionService mvcConversionService() { 
    FormattingConversionService bean = super.mvcConversionService(); //To change body of generated methods, choose Tools | Templates. 
    bean.addConverter(new StringToAbstractEntityConverter()); 
    bean.addConverter(new ArrayListToSetConverter()); 
    return bean; 
} 

Но когда я добавляю точку останова в приложении StringToAbstractEntityConverter, в ней не останавливается. Поэтому он не использует этот класс ...

Я хочу, чтобы преобразовать идентификатор от клиента к объекту ...

я буду очень благодарен, если кто-то может помочь мне с этим :)

Best привет, Мэтт.

ответ

0

Я предполагаю по вашему описанию, что вы используете конфигурацию Java.

@Configuration 
@EnableWebMvc 
@ComponentScan(...) 
public class CustomConfig extends WebMvcConfigurerAdapter { 

    @Override 
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { 
     converters.add(new StringToAbstractEntityConverter()); 
     converters.add(new ArrayListToSetConverter()); 
    } 

} 
+0

Преобразователи списка недействительны для моих преобразователей. – user3025978