Spring ContentNegotiatingViewResolver - How to use bean name for jsp view not full url with path parameters -
my servlet-context file has
<beans:bean class="org.springframework.web.servlet.view.contentnegotiatingviewresolver"> <beans:property name="usenotacceptablestatuscode" value="false" /> <beans:property name="contentnegotiationmanager"> <beans:bean class="org.springframework.web.accept.contentnegotiationmanager"> <beans:constructor-arg> <beans:bean class="org.springframework.web.accept.pathextensioncontentnegotiationstrategy"> <beans:constructor-arg> <beans:map> <beans:entry key="html" value="text/html" /> <beans:entry key="json" value="application/json" /> </beans:map> </beans:constructor-arg> </beans:bean> </beans:constructor-arg> </beans:bean> </beans:property> <beans:property name="viewresolvers"> <beans:list> <beans:bean class="org.springframework.web.servlet.view.beannameviewresolver"/> <beans:bean id="jspview" class="org.springframework.web.servlet.view.internalresourceviewresolver"> <beans:property name="prefix" value="/web-inf/jsp/" /> <beans:property name="suffix" value=".jsp" /> </beans:bean> </beans:list> </beans:property> <beans:property name="defaultviews"> <beans:list> <beans:bean class="org.springframework.web.servlet.view.json.mappingjackson2jsonview" /> </beans:list> </beans:property> </beans:bean>
my controller file has
@controller("resources") public class resources { @requestmapping(value = "/resources/{name}", method = requestmethod.get) public map getresource(@pathvariable string name) { return new hashmap(); } }
but whenever try access /server/resources/myfilename.html
server throws 404 saying /server/web-inf/jsp/resources/myfilename.jsp not found. should load /server/web-inf/jsp/resources.jsp im using beannameviewresolver. please help.
what get:
controller
return null view name,defaultrequesttoviewnametranslator
generates 1 uri = path servlet path without slashes , filename extension: resources/myfilenamebeannameviewresolver
tryview
context named resources/myfilename, seem fails , chain nextviewresolver
internalresourceviewresolver
returnjstlview
pointing jsp prefix + viewname + suffix = /web-inf/jsp/resources/myfilename.jsp
so beannameviewresolver
seems don't resolve view , return of internalresourceviewresolver
expected one.
what want (i think)
you want remove filename default view name, not extension.
- implements
requesttoviewnametranslator
, declare indispatcherservlet
context name viewnametranslator.
for example:
public class stripfilenameviewnametranslator extends defaultrequesttoviewnametranslator { @override protected string transformpath(string lookuppath) { string path = super.transformpath(lookuppath); return stringutils.substringbeforelast(path, "/"); } }
Comments
Post a Comment