我大體了解到三種解決辦法
第一種是從在web.xml中配置errorcode的404配置
(一般的做法是配置一個跳轉頁面,如果是網站的話,就搞一個404界面友好的提示,如果是接口的話可以在頁面上請求一個404的controller傳回提示資料,但是有個弊端是浏覽器的位址欄會變成這個404的controller位址,而不是使用者原通路位址)
第二種是從springmvc源碼出發,追溯springmvc在找不到請求url的時候是怎麼分發請求的,重寫分發器,改寫404的方法即可
但是以上兩種我個人感覺在對springmvc開發rest接口時并不實用,或者說太複雜。
第三種就是根據springmvc的特點:精确比對,也就是當使用者通路/project/test/a時不會進入到/project/test/*這個controller,就從這裡下手。
寫一個controller如下:
@Controller
public class ErroerController extends PublicMethod{
@RequestMapping(value={"/","/*"})
public @ResponseBody Map<String,Object> error(HttpServletRequest request)throws Exception{
Map<String,Object> rmap = new HashMap<String,Object>();
rmap.put("status", false);
rmap.put("message", "請求的URI位址不存在");
return rmap;
}
"/"的話隻能比對一個單個的"/",而"/*"可以滿足所有的不存在的url位址進入到這個請求