使用ResponseEntity和Optional的不兼容类型

时间:2019-04-20 14:51:17

标签: 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,但将“ body”推断为ResponseEntity:不存在类型变量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()来解决这个问题

0 个答案:

没有答案