Java - Spring: используйте @Value для преобразования int [] в Integer [] [duplicate]

Вы можете попробовать этот код. Я нашел его раньше, когда у меня возникла проблема, похожая на вашу.

if (isset($_GET['q1mrks']) && isset($_GET['marks']) && isset($_GET['qt1'])) {
$Q1mrks = $_GET['q1mrks'];
$marks = $_GET['marks'];
$qt1 = $_GET['qt1'];

$qtype_qry = mysql_query("
    SELECT *
    FROM s_questiontypes
    WHERE quetype_id = '$qt1'
");
$row = mysql_fetch_assoc($qtype_qry);
$qcode = $row['quetype_code'];

$sq_qry = "
    SELECT *
    FROM s_question
    WHERE quetype_code = '$qcode'
    ORDER BY RAND() LIMIT $Q1mrks
";
$sq_qry = mysql_query("
    SELECT *
    FROM s_question
    WHERE quetype_code = '$qcode'
    LIMIT $Q1mrks
");
while ($qrow = mysql_fetch_array($sq_qry)) {
    $qm = $qrow['marks'] . "<br />";
    $total += $qm . "<br />";
}
echo $total . "/" . $marks;
}
153
задан Jonik 26 October 2015 в 15:43
поделиться

10 ответов

Использование Spring EL:

@Value("#{'${my.list.of.strings}'.split(',')}") 
private List<String> myList;

Предполагая, что ваш файл свойств загружен правильно со следующим:

my.list.of.strings=ABC,CDE,EFG
304
ответ дан Ahmed Ashour 1 September 2018 в 01:32
поделиться

Рассмотрите возможность использования Commons Configuration. Он имеет встроенную функцию для разбиения записи в файле свойств на массив / список.


В соответствии с запросом, вот что вам нужно (на самом деле я не пробовал код, может получить некоторые типографии, пожалуйста, не стесняйтесь):

В конфигурации Apache Commons есть свойство PropertiesConfiguration. Он поддерживает функцию преобразования разделительной строки в массив / список.

Например, если у вас есть файл свойств

#Foo.properties
foo=bar1, bar2, bar3

С приведенным ниже кодом:

PropertiesConfiguration config = new PropertiesConfiguration("Foo.properties");
String[] values = config.getStringArray("foo");

предоставит вам строковый массив из ["bar1", "bar2", "bar3"]

. Для использования с Spring используйте это в своем контексте приложения xml:

<bean id="fooConfig" class="org.apache.commons.configuration.PropertiesConfiguration">
    <constructor-arg type="java.lang.String" value="classpath:/Foo.properties"/>
</bean>

и получите это весной bean:

public class SomeBean {

    @Value("fooConfig.getStringArray('foo')")
    private String[] fooArray;
}

Я считаю, что это должно работать: P

1
ответ дан Adrian Shum 1 September 2018 в 01:32
поделиться

, если использовать заполнители свойств, тогда пример ser1702544 станет

@Value("#{myConfigProperties['myproperty'].trim().replaceAll(\"\\s*(?=,)|(?<=,)\\s*\", \"\").split(',')}") 

С помощью заполнителя xml:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">   
    <property name="properties" ref="myConfigProperties" />
    <property name="placeholderPrefix"><value>$myConfigProperties{</value></property>
</bean>    

<bean id="myConfigProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
     <property name="locations">
         <list>
                <value>classpath:myprops.properties</value>
         </list>
     </property>
</bean> 
0
ответ дан cgull 1 September 2018 в 01:32
поделиться

Начиная с Spring 3.0, вы можете добавить строку, как

<bean id="conversionService" 
    class="org.springframework.context.support.ConversionServiceFactoryBean" />

, к вашему applicationContext.xml (или где вы настраиваете вещи). Как отмечает Дмитрий Чорный в комментарии, конфигурация на основе Java выглядит так:

@Bean public ConversionService conversionService() {
    return new DefaultConversionService();
}

Это активирует новую службу конфигурации, которая поддерживает преобразование типов String в Collection. Если вы не активируете эту конфигурационную службу, Spring отказывается от своих устаревших редакторов свойств в качестве служб конфигурации, которые не поддерживают такой тип преобразования.

Также работает преобразование в коллекции других типов:

@Value("${my.list.of.ints}")
private List<Integer> myList

будет работать с линией, подобной

 my.list.of.ints= 1, 2, 3, 4

Нет проблем с пробелом там, ConversionServiceFactoryBean позаботится об этом.

См. http : //docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#core-convert-Spring-config

В приложении Spring, вы обычно настраиваете экземпляр ConversionService на контейнер Spring (или ApplicationContext). Этот ConversionService будет выбран весной, а затем использоваться всякий раз, когда преобразование типа должно выполняться каркасом. [...] Если ConversionService не зарегистрирована в Spring, используется исходная система на основе PropertyEditor.

68
ответ дан Clemens Klein-Robbenhaar 1 September 2018 в 01:32
поделиться

Задав файл my.list.of.strings=ABC,CDE,EFG в файле .properties и используя

@Value("${my.list.of.strings}") private String[] myString;

Вы можете получить массивы строк. И используя CollectionUtils.addAll(myList, myString), вы можете получить список строк.

20
ответ дан Crazy Developer 1 September 2018 в 01:32
поделиться

Остерегайтесь пробелов в значениях. Я мог ошибаться, но я думаю, что пробелы в списке, разделенном запятыми, не усекаются с помощью @Value и Spel. Список

foobar=a, b, c

будет считан как список строк

"a", " b", " c"

. В большинстве случаев вам, вероятно, не нужны пробелы!

выражение

@Value("#{'${foobar}'.trim().replaceAll(\"\\s*(?=,)|(?<=,)\\s*\", \"\").split(',')}")
private List<String> foobarList;

предоставит вам список строк:

"a", "b", "c".

Регулярное выражение удаляет все пробелы непосредственно перед и сразу после запятой. Пробелы внутри значений не удаляются. Поэтому

foobar = AA, B B, CCC

должно приводить к значениям

"AA", "B B", "CCC".
0
ответ дан DAMungra 1 September 2018 в 01:32
поделиться

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

private @Value("#{T(java.util.Arrays).asList(projectProperties['my.list.of.strings'])}") List<String> myList;

А также вам нужно иметь следующую строку, определенную в вашей конфигурации xml.

<util:properties id="projectProperties" location="/project.properties"/>

просто замените путь и имя файла вашего файла свойств. И тебе хорошо идти. :)

Надеюсь, это вам поможет. Приветствия.

7
ответ дан Japan Trivedi 1 September 2018 в 01:32
поделиться

Если вы читаете это, и используете Spring Boot, у вас есть еще один вариант для этой функции

. Обычно список с запятой очень неуклюжий для случая использования в реальном мире (и иногда даже невозможно, если вы хотите использовать запятые в своей конфигурации):

email.sendTo=somebody@example.com,somebody2@example.com,somebody3@example.com,.....

С помощью Spring Boot вы можете записать его так (начало индекса в 0):

email.sendTo[0]=somebody@example.com
email.sendTo[1]=somebody2@example.com
email.sendTo[2]=somebody3@example.com

И использовать его например:

@Component
@ConfigurationProperties("email")
public class EmailProperties {

    private List<String> sendTo;

    public List<String> getSendTo() {
        return sendTo;
    }

    public void setSendTo(List<String> sendTo) {
        this.sendTo = sendTo;
    }

}


@Component
public class EmailModel {

  @Autowired
  private EmailProperties emailProperties;

  //Use the sendTo List by 
  //emailProperties.getSendTo()

}



@Configuration
public class YourConfiguration {
    @Bean
  public EmailProperties emailProperties(){
        return new EmailProperties();
  }

}


#Put this in src/main/resource/META-INF/spring.factories
  org.springframework.boot.autoconfigure.EnableAutoConfiguration=example.compackage.YourConfiguration
7
ответ дан Ng Sek Long 1 September 2018 в 01:32
поделиться

Считаете ли вы @Autowired конструктором или установщиком и String.split() в теле?

class MyClass {
    private List<String> myList;

    @Autowired
    public MyClass(@Value("${my.list.of.strings}") final String strs) {
        myList = Arrays.asList(strs.split(","));
    }

    //or

    @Autowired
    public void setMyList(@Value("${my.list.of.strings}") final String strs) {
        myList = Arrays.asList(strs.split(","));
    }
}

Я предпочитаю делать свое автоувеличивание одним из этих способов, чтобы повысить проверяемость моего кода.

18
ответ дан nicholas.hauschild 1 September 2018 в 01:32
поделиться

вы можете сделать это с помощью аннотаций, подобных этому

 @Value("#{T(java.util.Arrays).asList('${my.list.of.strings:a,b,c}')}") 
    private List<String> mylist;

. Здесь my.list.of.strings будут выбраны из файла свойств, если его там нет, то по умолчанию a, b, c будет использоваться

и в вашем файле свойств вы можете иметь что-то вроде этого

my.list.of.strings = d, e, f

2
ответ дан verma 1 September 2018 в 01:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: