如何从控制器发送列表并在jsp中接受json

时间:2016-12-28 09:57:13

标签: java ajax spring jsp

我想以json格式显示该列表。当我运行此代码时,它不会以json格式显示任何数据,而是以其他格式显示。如何显示该列表?

控制器类

@Controller
public class RoomController {

@RequestMapping(method = RequestMethod.GET)
public ModelAndView saveEmployee(){ 
    System.out.println("welcome");
  return new ModelAndView("NewFile","message","hello");
 }
@RequestMapping(value="ViewMember",method=RequestMethod.GET)
public @ResponseBody List<RoomMembers> getRoomMembers() {
    System.out.println("second test");
    List<RoomMembers> roomMemberList= new ArrayList<RoomMembers>();
    roomMemberList=roomDao.listMember();
    return roomMemberList;
}

Jsp文件是

<head>
<title>Spring MVC Ajax Demo</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<script type="text/javascript">
function doAjax() {
  $.ajax({
    url: '/RoomController/ViewMember',
    type: 'GET',
    success: function(data) {
    var roommember=JSON.parse(data);;
      $('#time').html(roommember);
    }
  });
 }
</script>
</head>
<body>
<button id="demo" onclick="doAjax()" title="Button">Get the time!</button>
<div id="time">
</div>
</body>

2 个答案:

答案 0 :(得分:1)

您似乎在请求错误的网址。在jsp的脚本中,传递给ur $.ajax()的网址是网址/RoomController/ViewMember.html。但是在您的控制器中,您已将ir映射为“ViewMember”

@RequestMapping(value="ViewMember",method=RequestMethod.GET,headers="Accept=application/json")

请尝试仅/RoomController/ViewMember请让我们知道它是否有效。

编辑

你说.html url被调用,你正在使用Spring 4.0.6,并且你得到HTTP 406 (NOTACCEPTABLE)响应。

首先检查您是否将Accept标头作为"application/json"发送。但是,在使用Spring 3.2或更高版本的Spring MVC控制器中,在".html" / ".htm"映射的控制器中,您将无法接收带有json响应的HTTP 200。来自https://stackoverflow.com/a/39479308/4190848

  

从Spring 3.2+开始,内容协商在eval Accept标题之前还有其他事实:

     

来自https://spring.io/blog/2013/05/11/content-negotiation-using-spring-mvc

     
    

在Spring MVC中启用内容协商

         

Spring支持两种选择格式的约定     required:URL后缀和/或URL参数。这些工作并存     使用Accept标头。结果,内容类型可以是     以三种方式中的任何一种请求。默认情况下,它们会在此处进行检查     顺序:

         
        
  • 在网址中添加路径扩展名(后缀)。因此,如果传入的URL类似于http://myserver/myapp/accounts/list.html,那么HTML     是必须的。对于电子表格,URL应该是     http://myserver/myapp/accounts/list.xls。媒体类型的后缀     映射是通过JavaBeans Activation自动定义的     Framework或JAF(所以activation.jar必须在类路径上)。
  •     
  • 这样的网址参数:http://myserver/myapp/accounts/list?format=xls。的名字     参数是默认格式,但可以更改。用一个     默认情况下禁用参数,但启用后,将检查该参数     第二

  •     
  • 最后检查Accept HTTP标头属性。这就是HTTP的方式&gt;实际上定义为工作,但如前所述,它     能够     使用会有问题。

  •     
  
     

这实际上意味着如果您将@Controller方法映射为   .htm(l)后缀,旨在返回html并且不会返回   即使您将其他格式发送为json,也可以Accept或任何其他格式   头。   ...

因此,将映射更改为除“.html”/“。htm”之外的其他后缀(或使用无后缀),您将解决错误

答案 1 :(得分:0)

ajax中的url是错误的,你应该写&#34; ViewMember&#34;。