Spring ContentNegotiatingViewResolver-如何使用带有路径参数的jsp视图非完整url的bean名称

Spring ContentNegotiatingViewResolver-如何使用带有路径参数的jsp视图非完整url的bean名称,spring,jsp,spring-annotations,Spring,Jsp,Spring Annotations,我的servlet上下文文件 <beans:bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> <beans:property name="useNotAcceptableStatusCode" value="false" /> <beans:property name="contentNegotiationManager"

我的servlet上下文文件

<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>
但是每当我试图访问/server/resources/myfilename.html

服务器抛出404,表示未找到/Server/WEB-INF/jsp/resources/myfilename.jsp。 但是它应该使用BeanNameViewResolver作为im加载/server/WEB-INF/jsp/resources.jsp。请帮助。

您得到的:

  • Controller
    返回一个空视图名,因此
    defaultrequesttoviewnametransflator
    从servlet路径的URI=path生成一个视图名,不带斜杠和文件扩展名:resources/myfilename

  • BeanNameViewResolver
    尝试从名为resources/myfilename的上下文中获取
    视图
    ,似乎失败并链接到下一个
    ViewResolver

  • InternalResourceViewResolver
    返回一个指向jsp前缀+viewName+suffix=/WEB-INF/jsp/resources/myfilename.jsp的
    JstlView

因此,
BeanNameViewResolver
似乎无法解析视图,而
InternalResourceViewResolver
的返回是预期的结果

你想要什么(我想)

您希望从默认视图名称中删除文件名,而不仅仅是扩展名

  • 实现一个
    RequestToViewNameTranslator
    ,并在
    DispatcherServlet
    上下文中用nameviewNameTranslator声明它
例如:

public class StripFileNameViewNameTranslator extends DefaultRequestToViewNameTranslator {

    @Override
    protected String transformPath(String lookupPath) {
        String path = super.transformPath(lookupPath);
        return  StringUtils.substringBeforeLast(path, "/");
    }
}

您的声誉计数器与错误匹配:-)@Bart LOL!。我没有注意到:)谢谢你的回答。我很快就会试一试。
public class StripFileNameViewNameTranslator extends DefaultRequestToViewNameTranslator {

    @Override
    protected String transformPath(String lookupPath) {
        String path = super.transformPath(lookupPath);
        return  StringUtils.substringBeforeLast(path, "/");
    }
}