Какой весенний видоискатель играет хорошо с angularjs?

Я пишу веб-приложение, используя angularjs и spring mvc в качестве поставщика услуг REST и в качестве поставщика частичного представления (я также использую angular-ui-router, чтобы иметь несколько вложенных партиалов). В настоящее время я не пользуюсь языками шаблонов, так как планирую делать все в угловом формате, однако у каждого отдельного преобразователя представлений, который я пробовал, есть какой-то тип языка шаблонов, который конфликтует с угловым и либо вылетает из приложения, и / или заполняет мои журналы. с ошибками.

Сначала я попытался использовать InternalResourceViewResolver, но не повезло, так как кажется, что он ожидает только файлы .jsp и больше ничего не показывает.

Тогда я попробовал использовать Thymeleaf. Thymeleaf следует стандарту XML, что вынудило меня переписать большую часть моего html в соответствии с требованиями xml, и после того, как я это сделал, он умер при обнаружении&& внутри директивы ng-show. Так что не повезло и с этим.

Тогда я попробовал Velocity. Мне больше всего повезло со скоростью. Он хорошо обслуживает html-файлы, не останавливается при обнаружении ошибок синтаксического анализа и позволяет мне обслуживать частичные представления так же, как это делает InternalResourceViewResolver. Однако при обнаружении угловых переменных с префиксом$ Velocity пытается проанализировать их как переменные VTL и заполняет мои журналы сообщениями вроде

velocity - Null reference [template 'clients/createOrEdit.html', line 1, column 65] : $invalid cannot be resolved.

Все продолжает работать как надо, но я не единственный, кто оставляет ошибки, и я не нашел способа отключить VTL.

Это мой текущий опыт работы с распознавателями представлений.

У меня также была идея обрабатывать файлы .html как статические ресурсы (что они вроде как делают до того, как angular делает это по волшебству), используяmvc:resources но без какого-либо преобразователя представления мое приложение не запустилось, даже если я установил main layout.html как файл приветствия в web.xml

Мой вопрос Что я должен использовать в качестве преобразователя представления, чтобы он хорошо работал с angularjs, и если мне даже следует использовать преобразователи представления?

РЕДАКТИРОВАТЬ: Я пытаюсь использоватьContentNegotiatingViewResolver и я получаю:

DEBUG ContentNegotiatingViewResolver - Requested media types are [text/html] based on Accept header types and producible media types [*/*])
DEBUG ContentNegotiatingViewResolver - No acceptable view found; returning null
DEBUG DispatcherServlet - Could not complete request
javax.servlet.ServletException: Could not resolve view with name 'layout.html' in servlet with name 'springDispatcherServlet'

webapp-config.xml (contextconfig в сервлете диспетчера)

    <mvc:annotation-driven />

    <!-- Resources -->
    <mvc:resources location="/libs/" mapping="/libs/**" />
    <mvc:resources location="/css/" mapping="/css/**" />
    <mvc:resources location="/js/" mapping="/js/**" />
    <!-- Angular application data -->
    <mvc:resources location="/WEB-INF/appjs/" mapping="/appjs/**" />
    <!-- View locations -->
    <mvc:resources location="/WEB-INF/html/" mapping="/**"/>

    <!-- Controllers -->
    <context:component-scan base-package="com.mrplow.controller" />

    <!-- Views -->
    <util:map id="contentMediaTypes">
        <entry key="json" value="application/json" />
        <entry key="html" value="text/html" />
    </util:map>

<!--    <util:list id="defaultViews"> -->
<!--        <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" />       -->
<!--    </util:list> -->

    <bean id="viewResolver" class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"
    p:order="1"
    p:ignoreAcceptHeader="false"
    p:defaultContentType="text/html"
    p:mediaTypes-ref="contentMediaTypes" /> 

LayoutController.java

@Controller
@RequestMapping("/")
public class LayoutController {

    @RequestMapping
    public String getIndexPage() {
        return "layout";
    }
}

Ответы на вопрос(3)

Ваш ответ на вопрос