2013-05-31 3 views
-2

Я хочу знать, есть ли бесплатная библиотека Java для автоматизации следующего процесса: 1) Один предоставляет URL-адрес, который следует за определенным шаблоном, например.Библиотека Java для генерации URL-адресов из шаблона

http://www.asite.com/path/to/something/thischange/alsothischange-andthischangetoo 

где указать из приведенных выше строк, что:

  • thischange представляет собой целое число, определенное в пределах диапазона [0-10];
  • alsothischange - месяц, затем в комплекте {jan, ...., dec};
  • andthischangetoo - целое число, определенное в диапазоне [0-1000];

2) Учитывая шаблон, библиотека генерирует все возможные URL-адреса, например.

http://www.asite.com/path/to/something/0/jan-0 
http://www.asite.com/path/to/something/1/jan-0 
http://www.asite.com/path/to/something/2/jan-0 
... 

Очевидно, что я могу разработать код самостоятельно, но если есть что-то доступное, было бы лучше.

+4

Это примерно 6 строк кода; вам действительно нужна библиотека для этого? –

+1

@OliCharlesworth вы, кажется, забыли шаблоны URI (RFC 6570), см. Мой ответ – fge

+0

@fge: Я не уверен, что существование этого отрицает то, что я делал;) Примерный код в вашем ответе выглядит так же, как «сложный», как если бы вы делали это в чистой Java ... –

ответ

3

Отказ от ответственности: Я являюсь автором, но ...

Вы можете попробовать this library. Это реализация RFC 6570 (шаблоны URI). Справедливости ради следует отметить, что существует another implementation, который имеет более удобный API, но гораздо больше зависимостей (мой зависит только от Guava).

Допустим, у вас есть переменные int1, int2, month, ваш шаблон будет:

http://www.asite.com/path/to/something/{int1}/{month}-{int2} 

Используя библиотеку, вы можете сделать что-то вроде этого:

// Since the lib depends on Guava, might as well use that 
final List<String> months = ImmutableList.of("jan", "feb", "etc"); 

// Create the template 
final URITemplate template 
    = new URITemplate("http://www.asite.com/path/to/something/{int1}/{month}-{int2}"); 

// Variable values 
VariableValue int1, month, int2; 

// Expansion data 
Map<String, VariableValue> data; 

// Build the strings 
for (int i1 = 0; i1 <= 10; i1++) 
    for (final String s: months) 
     for (int i2 = 0; i2 <= 1000; i2++) { 
      int1 = new ScalarValue(Integer.toString(i1)); 
      month = new ScalarValue(s); 
      int2 = new ScalarValue(Integer.toString(i2)); 
      data = ImmutableMap.of("int1", int1, "month", month, "int2", int2); 
      // Print the template 
      System.out.println(template.expand(data)); 
     } 

Важное примечание: .expand() метод возвращает String, а не URI или URL. Причина в том, что, хотя RFC гарантирует результаты расширения, он не может гарантировать, что результирующая строка на самом деле является URI или URL. Вам придется превратить эту строку в то, что вы хотите сами.

+0

Это именно то, что я искал. Почему я должен реализовать много кода, если кто-то еще это сделал! Спасибо! –

+0

Добро пожаловать;) Реальная проблема здесь в том, что RFC 6570 не очень хорошо известен ... И боль для реализации (могу сказать: p) – fge

+0

Итак, вы можете понять, почему я искал библиотеку! –

Смежные вопросы