Библиотека для анализа URI из String с фрагментом перед запросом - PullRequest
0 голосов
/ 18 января 2019

Существует ли библиотека, которая будет анализировать фрагмент и выполнять запрос из строки в URI, даже если строка содержит фрагмент и запрос в неправильном порядке?

import java.net.URI;

public class UriTest {

    public static void main(String[] args){

        String validUriString = "http://localhost:4200/?name=value#/fragment";
        String invalidUriString = "http://localhost:4200/#/fragment?name=value";

        URI validUri = URI.create(validUriString);
        URI invalidUri = URI.create(invalidUriString);

        System.out.println("OK:     "+validUri.getFragment());
        System.out.println("OK:     "+validUri.getQuery()+"\n");
        System.out.println("NOT OK: "+invalidUri.getFragment());
        System.out.println("NOT OK: "+invalidUri.getQuery());
    }
}

Выход:

OK:     /fragment
OK:     name=value

NOT OK: /fragment?name=value
NOT OK: null

Было бы неплохо получить одинаковый результат в обоих случаях.

1 Ответ

0 голосов
/ 18 января 2019

Нет гарантий, будет ли это работать для всех URL, но вы можете попробовать проверить, не нарушен ли URL, и исправить это так:

...

public static String fixUrl(String url) {

    int fragmentIndex = url.indexOf("#");
    int queryIndex = url.indexOf("?");

    if(fragmentIndex < queryIndex && fragmentIndex > -1) 
        return url.substring(0,fragmentIndex) + url.substring(queryIndex) + url.substring(fragmentIndex, queryIndex);
    else 
        return url;

}

public static void main (String[] args) {

    String validUriString = "http://localhost:4200/?name=value#/fragment";
    String invalidUriString = "http://localhost:4200/#/fragment?name=value";


    URI validUri = URI.create(fixUrl(validUriString));
    URI invalidUri = URI.create(fixUrl(invalidUriString));

    System.out.println("OK:     "+validUri.getFragment());
    System.out.println("OK:     "+validUri.getQuery()+"\n");
    System.out.println("OK: "+invalidUri.getFragment());
    System.out.println("OK: "+invalidUri.getQuery());

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...