相关疑难解决方法(0)

如何在弹簧靴中注册自定义转换器?

我使用spring-boot-starter-jdbc(v1.3.0)编写应用程序.

我遇到的问题:BeanPropertyRowMapper失败的实例,因为它无法转换java.sql.Timestampjava.time.LocalDateTime.

为了复制这个问题,我实现 org.springframework.core.convert.converter.Converter了这些类型.

public class TimeStampToLocalDateTimeConverter implements Converter<Timestamp, LocalDateTime> {

    @Override
    public LocalDateTime convert(Timestamp s) {
        return s.toLocalDateTime();
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何让我提供TimeStampToLocalDateTimeConverterBeanPropertyRowMapper.

更一般的问题是,如何注册我的转换器,以使它们在系统范围内可用?

以下代码将我们带到NullPointerException初始化阶段:

private Set<Converter> getConverters() {
    Set<Converter> converters = new HashSet<Converter>();
    converters.add(new TimeStampToLocalDateTimeConverter());
    converters.add(new LocalDateTimeToTimestampConverter());

    return converters;
}

@Bean(name="conversionService")
public ConversionService getConversionService() {
    ConversionServiceFactoryBean bean = new ConversionServiceFactoryBean();
    bean.setConverters(getConverters()); 
    bean.afterPropertiesSet();
    return bean.getObject();
}    
Run Code Online (Sandbox Code Playgroud)

谢谢.

java spring spring-data spring-boot

13
推荐指数
1
解决办法
8850
查看次数

spring-boot中的多个conversionServices

我有一个启动应用程序,并在我的一个外观我尝试Autowire conversionService这样:

@Autowired
private ConversionService conversionService;
Run Code Online (Sandbox Code Playgroud)

结果我得到了这个:

Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [org.springframework.core.convert.ConversionService] is defined: expected single matching bean but found 3: mvcConversionService,defaultConversionService,integrationConversionService
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1061)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:949)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:533)
... 16 more
Run Code Online (Sandbox Code Playgroud)

为了克服这个问题,我添加了一个限定符lilke:

@Autowired
@Qualifier("mvcConversionService")
private ConversionService c;
Run Code Online (Sandbox Code Playgroud)

这一切都有效.但是我的所有自定义转换器都会自动添加到mvcConversionService.现在我想扩展ConversionService并添加另一种方法,但我的转换器再次添加到mvcConversionService.有没有办法告诉spring-boot conversionService使用哪些来自动注册我的转换器?我不想手动将所有转换器列入新的转换器conversionService.

spring-boot

8
推荐指数
1
解决办法
4019
查看次数

如何使用java配置配置Spring ConversionService?

我有这样的xml:

<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <list>
                <bean class="converters.AddressToStringConverter" />
                <bean class="converters.StringToAddressConverter" />
            </list>
        </property>
    </bean>
Run Code Online (Sandbox Code Playgroud)

它可以毫无问题地配置转换器.

但是这段代码无法做到:

@Configuration
public class ConversionConfiguration {

    @Bean
    public ConversionService getConversionService() {
        ConversionServiceFactoryBean bean = new ConversionServiceFactoryBean();
        bean.setConverters(getConverters());
        bean.afterPropertiesSet();
        ConversionService object = bean.getObject();
        return object;
    }

    private Set<Converter> getConverters() {
        Set<Converter> converters = new HashSet<Converter>();

        converters.add(new AddressToStringConverter());
        converters.add(new StringToAddressConverter());

        return converters;
    }
}
Run Code Online (Sandbox Code Playgroud)

这个配置由上下文扫描 - 我用调试器检查它.哪里可能是问题?

java xml configuration spring

6
推荐指数
2
解决办法
2万
查看次数

Java Config等效于conversionService/FormattingConversionServiceFactoryBean

我有一个包含另一个实体的实体,如下所示:

public class Order {

    @Id
    private int id;

    @NotNull
    private Date requestDate;

    @NotNull
    @ManyToOne(cascade=CascadeType.ALL)
    @JoinColumn(name="order_type_id")
    private OrderType orderType;
}

public class OrderType {

    @Id
    private int id;

    @NotNull
    private String name;
}
Run Code Online (Sandbox Code Playgroud)

我有一个Spring MVC表单,用户可以在其中提交新订单; 他们必须填写的字段是请求日期并选择订单类型(这是一个下拉列表).

我正在使用Spring Validation来验证在尝试将orderType.id转换为OrderType时失败的表单输入.

我编写了一个自定义转换器来将orderType.id转换为OrderType对象:

public class OrderTypeConverter implements Converter<String, OrderType> {

    @Autowired
    OrderTypeService orderTypeService;

    public OrderType convert(String orderTypeId) {

        return orderTypeService.getOrderType(orderTypeId);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是我不知道如何使用java配置使用Spring注册此转换器.我发现的XML等价物(来自Spring MVC中的Dropdown值绑定)是:

<mvc:annotation-driven conversion-service="conversionService"/>

<bean id="conversionService"
    class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
    <property name="converters">
       <list>
          <bean class="OrderTypeConverter"/>
       </list>
    </property>
</bean>
Run Code Online (Sandbox Code Playgroud)

从搜索网络我似乎找不到相当于java配置 - 有人可以帮助我吗?

UPDATE

我已将OrderTypeConvertor添加到WebMvcConfigurerAdapter,如下所示: …

java spring spring-mvc

6
推荐指数
1
解决办法
7081
查看次数