2016-02-17 3 views
1

У меня есть этот кусок кода:Возвращение ошибка с HttpEntity в Spring MVC

public HttpEntity<byte[]> getReport(){ 
     WebController.LOGGER.info("Requested report"); 

     try { 
      byte[] reportData= reportService.getReport(); 
      return new HttpEntity<byte[]>(reportData); 
     } catch (ReportGenerationException e) { 
      //WHAT DO I RETURN HERE? 
     } 
    } 

Я хочу, чтобы вернуть ошибку 500, когда отчет не может быть создан, но HttpEntity не позволяет мне установить статус HTTP код. Как я могу обойти это?

ответ

0

Вы можете использовать ResponseEntity (дочерний элемент HttpEntity) для установки кодов состояния HTTP.

public ResponseEntity<byte[]> getReport(){ 
    WebController.LOGGER.info("Requested report"); 

    try { 
     byte[] reportData= reportService.getReport(); 
     return new HttpEntity<byte[]>(reportData); 
    } catch (ReportGenerationException e) { 
     //WHAT DO I RETURN HERE? 
     return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); 
    } 
} 
+0

Я не могу этого сделать, HttpEntity не является ResponseEntity. Я могу, однако, сделать это наоборот. Благодаря! – MichelReap

+0

ResponseEntity расширяет HttpEntity. Так вы не можете просто вздыматься? – WeMakeSoftware

0

Я думаю, вы можете создать следующее исключение:

@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) 
public class ReportInternalException extends RuntimeException { 
    public ReportInternalException (String message) { 
     super(message); 
    } 
} 

И бросить его в свой улов блока:

...  
} catch (ReportGenerationException e) { 
     throw new ReportInternalException(e.getMessage()); 
} 
0

Почему бы не попробовать это?

return new ResponseEntity<Exception>(e,HttpStatus.INTERNAL_SERVER_ERROR); 
+0

Не могли бы вы объяснить, почему это сработает? – Jeeter

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