Aktywne Wpisy

Tommy__ +26
źródło: Zdjęcie z biblioteki
Pobierz
jobless +23
źródło: 2cbf82fa3ec7170c4ff49a95e4b649e03fd3a3e98dd8c78fca3e2ac36da01025
PobierzJak bardzo podoba ci się Iza Adamczyk?
- zsetvpvnfacemvsuaafv 21.6% (38)
- kxwykerhgyrykshruzhj 30.1% (53)
- pqoomykhronzyczoakhk 48.3% (85)





Aplikacja Rest, java, spring.
Dostaje w headerze "Accept-Language" - na jego podstawie ustalam główny obsługiwany język naszej przeglądarki.
Potem wyciągam z bazy danych wszystkie języki obsługiwane przez moją aplikacje, mapuję na mój model restowy i chcę ustawić w mojej liście języków ustawić który element jest aktualnym językiem.
główna metodamapująca:
public static List mapFromSupportedLanguagesEntitiesAndSetActualLanguage(List supportedLanguagesEntities, String actualLanguage) {
List supportedLanguagesList = new ArrayList<>();
for (SupportedLanguagesEntity supportedLanguagesEntity : supportedLanguagesEntities){
SupportedLanguages supportedLanguages = mapFromSupportedLanguagesEntity(supportedLanguagesEntity);
supportedLanguagesList.add(supportedLanguages);
}
setActualLanguage(supportedLanguagesList, actualLanguage);
return supportedLanguagesList;
}
metodaustawiająca flagę:
private static void setActualLanguage(List supportedLanguagesList, String actualLanguage) {boolean actualLanguageExist = supportedLanguagesList.stream().anyMatch(s -> actualLanguage.equalsIgnoreCase(s.getIdentity()));
if (actualLanguageExist) {
for(SupportedLanguages supportedLanguages : supportedLanguagesList) {
if (actualLanguage.equalsIgnoreCase(supportedLanguages.getIdentity())) {
supportedLanguages.setActualLanguage(true);
}
}
} else {
for(SupportedLanguages supportedLanguages : supportedLanguagesList) {
if ("EN".equalsIgnoreCase(supportedLanguages.getIdentity())) {
supportedLanguages.setActualLanguage(true);
}
}
}
}
Pytanie jak ładniej napisać drugą metodę, nie podoba mi się że muszę trzykrotnie przelecieć po całej liście i interesuje mnie jakieś lepsze rozwiązanie(jesli jest).
PS. Jest dla javy jakis serwis gdzie mogę wrzucić kod który automatycznie sie tam sformatuje i nie trzeba go uruchamiać?
#java #naukaprogramowania
@dinor913: github ma gist
boolean actualLanguageExist = supportedLanguagesList.stream().anyMatch(s -> actualLanguage.equalsIgnoreCase(s.getIdentity()));if (actualLanguageExist) {
for(SupportedLanguages supportedLanguages : supportedLanguagesList) {
if
SupportedLanguage actualLang = langMap.get(actualLanguage);
if (actualLang != null)
1.Muszę użyć pętli aby utworzyć mapy z odpowiednim kluczem.
2.Klucze muszą być odporne na wielkość liter więc musiał bym mieć w mapie mieć getIgnoreCase...
(można samemu stworzyć taką mapę)
ad 1) nie, nie musisz.
ad 2) Czemu muszą być odporne? Kto ustawia header w rządaniu HTTP?
Wrzucam na gist kod teraz lepiej wygląda.
Ominąłeś drugi warunek czyli ustaw jezyk EN jako podstawowy jeśli żadnego nie znajdzie.
1.Faktycznie mój błąd.
2.Uczono mnie że nie powinienem polegać na tym że obiekt zawsze będzie taki i taki i powinienem zapobiegać tego typu poprzez rożnego rodzaju walidacje - w tym przypadku ignoreCase.
Co sądzisz o tego typu zabezpieczeniach programu że np mamy w bazie danych wartości z małych liter i z hedera też dostajemy wartość z małych liter a i tak chcemy sie zabezpieczyć poprzez użycie
Ale w tym przypadku zadałem pytanie - kto ustawia wartość headera? Tag language jest case-insensitive, więc jeśli to zawsze Ty (czy podmiot nad którym masz pełną kontrolę) ustawia ten tag, to możesz śmiało przyjąć, że np. zawsze będzie pisany wielkimi literami -> dzięki temu odpadnie Ci sprawdzanie, ot, jak ktoś wyśle małymi, to