Java 无法从Spring映射获取字符串响应
我一直在做一个基于Spring的web项目。大多数端点都被设置为返回XML,并且使用REST封送器可以很好地工作。作为项目演示的一部分,我希望有一个仪表板,以更人性化的可读格式显示数据 问题是,我无法让端点返回字符串。当我尝试访问端点时,会收到以下错误消息:Java 无法从Spring映射获取字符串响应,java,spring,spring-mvc,Java,Spring,Spring Mvc,我一直在做一个基于Spring的web项目。大多数端点都被设置为返回XML,并且使用REST封送器可以很好地工作。作为项目演示的一部分,我希望有一个仪表板,以更人性化的可读格式显示数据 问题是,我无法让端点返回字符串。当我尝试访问端点时,会收到以下错误消息: JBWEB000065: HTTP Status 406 - JBWEB000309: type JBWEB000067: Status report JBWEB000068: message JBWEB000069: descrip
JBWEB000065: HTTP Status 406 -
JBWEB000309: type JBWEB000067: Status report
JBWEB000068: message
JBWEB000069: description JBWEB000126: The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request 'Accept' headers.
映射请求代码如下所示:
@RequestMapping(value="/dash", method=RequestMethod.GET, headers="Accept=*/*",produces="text/plain")
@ResponseBody
public String customerPortal()
{
return "WEB-INF/jsp/Dash.jsp";
}
其他(XML)端点工作正常,文件本身也存在。在这一点上,我愿意接受任何将HTML传输到浏览器的方式,我不需要任何花哨的东西,只需要一个不会违反AJAX单源限制的文件。很抱歉,如果有一个简单的解决方案,我已经尝试了六种不同的解决方案,但找不到任何方法让服务器发送XML以外的任何内容
编辑:删除@ResponseBody、方法、标题和生成注释后,它现在给出以下响应:
JBWEB000065: HTTP Status 500 - Could not resolve view with name '/WEB-INF/jsp/ScorpioDash.jsp' in servlet with name 'scorpio-restservice'
JBWEB000309: type JBWEB000066: Exception report
JBWEB000068: message Could not resolve view with name '/WEB-INF/jsp/ScorpioDash.jsp' in servlet with name 'scorpio-restservice'
JBWEB000069: description JBWEB000145: The server encountered an internal error that prevented it from fulfilling this request.
JBWEB000070: exception
javax.servlet.ServletException: Could not resolve view with name '/WEB-INF/jsp/ScorpioDash.jsp' in servlet with name 'scorpio-restservice'
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1190)
org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:992)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:939)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827)
javax.servlet.http.HttpServlet.service(HttpServlet.java:734)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
终于找到了答案。在scorpio-restservice-servlet.xml文件(抱歉,我没有发布)中,我没有定义InternalResourceViewResolver。添加以下内容:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/static/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
/WEB-INF/静态/
.jsp
修复了该问题,并使其能够完美地呈现.jsp文件。非常感谢您的帮助。您向
/dash
发送请求的Accept
标题是什么?此方法返回Spring必须前进的视图的名称。所以它返回的不是响应体。所以它不应该用ResponseBody注释。另外,您很可能没有返回正确的字符串以转发到视图(取决于您如何设置视图解析器)。老实说,我不知道accept头是什么。如果有帮助的话,我正在尝试从浏览器访问它。至于反应体,我实际上是在寻找任何一种反应。在某种程度上,我想让servlet返回浏览器可以显示的任何内容。它不需要漂亮,我只需要让它工作。从@Requestmapping
中删除标题
,您就可以关注上面提到的其他潜在问题。这只有在您删除@ResponseBody
注释后才有效。在你的回答中添加这一点很重要。正确,这就是为什么我问预期结果是什么。获取要呈现的JSP与查看文件内容完全不同。您还应该在解析器上设置前缀,以避免在控制器中执行完整的WEB-INF/JSP
路径。