我在应用程序中编写了一个控制器,用于查找属于用户的项并返回它。但是,当请求包含不属于用户的项目的ID时,我的控制器将返回一个空对象。如何强制应用程序发出403错误呢?
下面是控制器的简化代码:@Controller
@RequestMapping("/item")
public class ItemController {
@Autowired
private ItemService itemService;
@GetMapping(value="/getItem", produces = MediaType.TEXT_PLAIN_VALUE)
public String getItem(@RequestParam("itemId") int itemId,
HttpServletRequest request,
Model theModel) {
// get the username from the HTTP Request
Principal principal = request.getUserPrincipal();
String theUsername = principal.getName();
// create model attribute to bind form data
Item theItem = itemService.getItem(itemId);
if (theUsername.equals(theItem.getUserProfile().getUsername())) {
theModel.addAttribute("item", theItem);
} else {
theModel.addAttribute("item", new Item());
}
return "json/item";
}
}
注:请注意,ItemService
只是一个中间层,它连接到数据层并获取数据返回。
注:我知道设计可能没有遵循最佳实践。请随意在评论中强调任何设计问题,但避免在帖子中对它们进行咆哮。
有两种方法。您可以像这样在控制器类方法中设置状态码
@ResponseStatus(HttpStatus.SC_FORBIDDEN)
public Response doSomething() {
//do some thing here and return
}
如果这不符合你的要求,你可以像这样在一个异常处理程序方法中处理它。
@ResponseStatus(code = HttpStatus.SC_FORBIDDEN)
class CustomException extends RuntimeException {
//Handle something here;
}
查看