#java #spring
#java #spring
Вопрос:
Я пытаюсь использовать необязательную карту для возврата ответа ok со значением, если значение присутствует, а если нет, я хочу вернуть карту с кодом состояния 4xx.
public ResponseEntity createUrl(@RequestBody String url){
return service.createUrl(url)
.map(ResponseEntity::ok)
.orElseGet(() -> ResponseEntity.status(HttpStatus.CONFLICT).body(Collections.singletonMap("error","Invalid url")));
}
Это говорит:
Несовместимые типы. Требуется ResponseEntity, но для ResponseEntity было выведено ‘body’: не существует экземпляров переменных типа K, V, так что Map соответствует переменной вывода Url T имеет несовместимые границы: ограничения равенства: нижние границы Url: Map
Но это работает так:
public ResponseEntity createUrl(@RequestBody String url){
if(service.createUrl(url).isPresent()){
return service.createUrl(url).map(ResponseEntity::ok).get();
}else{
return ResponseEntity.status(HttpStatus.CONFLICT).body(Collections.singletonMap("error","Invalid url"));
}
}
Метод createUrl из службы:
public Optional<Url> createUrl(String url){
try {
URL myURL = new URL(url);
URLConnection myURLConnection = myURL.openConnection();
myURLConnection.connect();
if(repository.existsByOriginalUrl(url)){
return Optional.of(repository.getByOriginalUrl(url));
}else{
return Optional.of(repository.save(new Url(url,null)));
}
} catch (IOException e) {
return Optional.empty();
}
}
Я хочу избежать использования isPresent() и решить это с помощью map() и orElseGet()
Комментарии:
1. что именно
createUrl
возвращает?2. он возвращает необязательный<Url>
3. можете ли вы показать объявление метода и возвращаемый тип?
4. проверьте мой ответ, и я спрашиваю о методе, который состоит из этого
ResponseEntity
кода, а неcreateUrl
извинения за путаницу5. Используя необязательный, вы не можете возвращать два разных типа объектов