我正在尝试从@RequestMapping路径中排除静态资源,以避免对方法的多余调用。
我试图简单地检查url,如果它是无用的资源,但是拦截器在此之后找不到资源,并且它还是运行方法,因为它们使用@ModelAttribute进行了注释。
GlobalController.java
@RequestMapping(value = "/")
public class GlobalControllerAdvice {
public static int k;
@Autowired
private UsersService usersService;
@ModelAttribute("unread")
public int unread(Principal principal) {
int unread = 0;
k++;
System.err.println("Inside unread " + k);
if (principal != null) {
User user = usersService.getWithUser(principal.getName(), "notifications");
for (Notification n : user.getNotifications())
if (!n.isRead())
unread++;
}
return unread;
}
}
资源处理程序
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**").addResourceLocations("/resources/");
}
预期结果应排除所有包含“静态”的url,但现在不包含它,并且jsp页面中的每个图像和脚本都将调用unread()。
答案 0 :(得分:0)
如果您只想使用Spring进行此操作,则可能会有点混乱:
完成所有操作后,所有无法映射到控制器的请求都将转发到HttpRequestHandler
并按原样提供。
答案 1 :(得分:0)
void formatDouble(char* buf, double val, int precMin, int precMax) {
sprintf(buf, "%.*f", precMax, val);
int startpos = 0;
int length = strlen(buf);
bool found = false;
for (int z = 0; z < length; z++)
{
if (buf[z] == '.')
{
startpos = z;
found = true;
break;
}
}
if (!found)
return;
int endIndex = startpos + precMin;
found = false;
for (int z = precMax + startpos; z >= startpos + precMin; z--)
{
if (buf[z] >= '1' && buf[z] <= '9')
{
endIndex = z;
if (endIndex < startpos + precMax)
{
// Round Digit
if (buf[z + 1] >= '5')
buf[z]++;
}
found = true;
break;
}
}
for (int z = endIndex + 1; z <= length; z++)
{
if (z <= startpos + precMax)
buf[z] = 0;
}
}