5 回答

TA貢獻1851條經(jīng)驗 獲得超4個贊
HandlerInterceptor
您想要的是其他地方建議的實現(xiàn)。然而,從您對該答案的評論來看,您誤解了 API:
我已在您提供的文檔鏈接中閱讀了 preHandle 方法。但它返回布爾值。我可以使用此方法返回 JSON 輸出嗎?
正如 API 文檔所指出的,布爾值僅向框架發(fā)出信號:是否應繼續(xù)處理:
如果執(zhí)行鏈應繼續(xù)執(zhí)行下一個攔截器或處理程序本身,則返回 true。否則,DispatcherServlet 假定該攔截器本身已經(jīng)處理了響應。
所以要返回 JSON:
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception{
if(someCondition){
return true; //continue processing
}else{
response.getOutputStream().write("{\"message\" : \"some text\"}");
response.setContentType("text/json");
response.setStatus(...); //some http error code?
response.getoutputStream().flush();
return false; //i have written some JSON to the response. Processing stops here
}
}

TA貢獻1906條經(jīng)驗 獲得超3個贊
有很多方法可以實現(xiàn)它。
通過編寫老式的 servlet 過濾器。編寫您自己的過濾器來驗證請求并處理請求。
通過編寫彈簧過濾器。
通過使用Spring AOP。(受到推崇的)
通過編寫您自己的注釋,它將驗證請求,并在您想要驗證的方法之上給出。(受到推崇的)
可能還有其他方法。

TA貢獻1871條經(jīng)驗 獲得超13個贊
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
@Component
public class ServiceInterceptor implements HandlerInterceptor {
? ?@Override
? ?public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
? ? ? System.out.println("Pre Handle method is Calling");
? ? ? return true;
? ?}
? ?@Override
? ?public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
? ? ? System.out.println("Post Handle method is Calling");
? ?}
? ?@Override
? ?public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception exception) throws Exception {
? ? ? System.out.println("Request and Response is completed");
? ?}
}
添加回答
舉報