我有一个请求映射,它返回json中数据库的列表。如果访问者在浏览器中输入了确切的网址,页面是否会为空?
@RequestMapping(value = "/pics/{profileId}", method = RequestMethod.GET, headers = "Accept=application/json")
@ResponseBody
public List<ProfilePic> getProfilePics(@PathVariable("profileId") BigInteger profileId) {
return practiceServices.getProfilePics(profileId);
}
如果访问者输入了网址http://localhost:8080/practiceProject/pics/10
,该页面将显示该列表,但我不希望访问者看到它。我希望浏览器显示一个空页面。有可能吗?
答案 0 :(得分:0)
如果您只想快速解决方案,请检查将在您的AJAX请求中发送的标头。如果这不可用,只需返回null
或其他。您还可以返回ResponseEntity<List<ProfilePic>>
,如果标题不存在,则使用ResponseEntity
静态方法/构建器以不同的HTTP状态响应或仅使用空主体或204(无内容)。
例如,您可以检查标头X-Requested-With
是否可用值XMLHttpRequest
。这是使用AJAX时将发送的默认标题之一(但并非总是如此;我不确切知道它何时发送,何时不知道 - 可能取决于使用的javascript库)。
但请记住:这并不安全,有人可以伪造这些标题并访问该页面。
如果您希望完整API使用此类行为,请在检查此标头的过滤器内进行尝试,如果可用,请继续doFilter
,否则请停止并回复任何内容。
答案 1 :(得分:0)
您正在返回请求正文的列表,如果您不想这样做,您应该创建一个ModelAndView对象并将对象列表添加到其中。
示例:
`@RequestMapping(value =&#34; / pics / {profileId}&#34;,method = RequestMethod.GET,headers =&#34; Accept = application / json&#34;)
public ModelAndView getProfilePics(@ PathVariable(&#34; profileId&#34;)BigInteger profileId){ ModelAndView view = new ModelAndView(&#34; html_to_be_returned&#34;); view.addObject(&#34; list&#34;,practiceServices.getProfilePics(profileId)); 返回视图 }&#39;
PS:我没有测试过这段代码,所以它也有同样的问题。