2014-07-16 50 views
3

使用ReponseEntity返回錯誤消息的最佳方式是什麼?ResponseEntity Spring MVC

說我有以下方法

@Transactional 
@RequestMapping(value = "/{id}", method = RequestMethod.GET) 
public ResponseEntity<User> getUser(@PathVariable("id") Long id) { 

    User user = userRepository.findOne(id); 

    if (user == null) { 
     return new ResponseEntity<>(HttpStatus.NOT_FOUND); 
    } 
    else { 
     return new ResponseEntity<>(user, HttpStatus.OK); 
    } 

現在,如果我想返回一個錯誤信息給前端?我不能做到以下幾點,因爲該方法返回類型爲

ResponseEntity<User> 

ResponseEntity<String> 

所以這是行不通的

if (user == null) { 
     return new ResponseEntity<>("User does not exist", HttpStatus.NOT_FOUND); 
    } 

我可以使該方法返回類型

ResponseEntity<Object> 

但那只是eems slopy和糟糕的做法。我希望能夠返回至少一個簡短的錯誤信息,以便指出前端出了什麼問題。這樣做的最好方法是什麼?

更新:

經過一番周圍挖我想出了這一點,它似乎工作,但好奇,如果它會影響性能。

@RequestMapping(value = "/{id}", method = RequestMethod.GET) 
public ResponseEntity<?> getUser(@PathVariable("id") Long id) { 

    User user = userRepository.findOne(id); 

    if (user == null) { 
     return new ResponseEntity<>("User not found", HttpStatus.NOT_FOUND); 
    } 
    else { 
     return new ResponseEntity<>(user, HttpStatus.OK); 
    } 
} 

回答

4

我知道你特別問有關返回使用ReponseEntity錯誤消息,但你也可以考慮使用Spring MVCs exception handling到acheive相同的結果:

// Example from the linked Spring article: 

@RequestMapping(value="/orders/{id}", method=GET) 
public String showOrder(@PathVariable("id") long id, Model model) { 
    Order order = orderRepository.findOrderById(id); 
    if (order == null) throw new OrderNotFoundException(id); 
    model.addAttribute(order); 
    return "orderDetail"; 
} 


@ResponseStatus(value=HttpStatus.NOT_FOUND, reason="No such Order") // 404 
public class OrderNotFoundException extends RuntimeException { 
    // ... 
} 
+0

有趣的....這實際上是將工作一樣好。我可以創建一個通用的RecordNotFoundException並將其映射到HttpStatus.NOT_FOUND。謝謝(你的)信息。 – greyfox

相關問題