AngularJS 通过调用 Spring Boot Controller 响应 thymeleaf.exceptions.TemplateInputException

Posted

技术标签:

【中文标题】AngularJS 通过调用 Spring Boot Controller 响应 thymeleaf.exceptions.TemplateInputException【英文标题】:AngularJS via calling to Spring boot Controller responded with thymeleaf.exceptions.TemplateInputException 【发布时间】:2018-09-08 09:34:13 【问题描述】:

你好,我会一步一步告诉你,我做了什么,

1.我有一个名为ManualChargesListV2.html的HTML页面,当页面加载时需要加载Dropdown中的数据,所以我使用thymeleaf来显示...

这是@Controller 代码

@GetMapping(value="/manualbillentry")
public ModelAndView doFetchUnitCharges(HttpSession session)

    ModelAndView model = new ModelAndView();
    WrpSession wrpsession = new WrpSession();
    wrpsession = (WrpSession) session.getAttribute("totalObj");

    try 
        model.setViewName("ManualChargesListV2");
        List<EntSetCharges> flatBillsManualList = new ArrayList<>();
        flatBillsManualList = serbilldetails.doFetchUnitCharges(wrpsession);
        model.addObject("manuallist",flatBillsManualList);

    
    catch (Exception e)
        e.printStackTrace();

    
    return model;

2.html页面完美加载下拉列表中的数据,当再次选择下拉列表时需要点击控制器以显示有关所选下拉值的数据,所以我使用类似的代码

<div class="form-group col-md-6">
                                <label for="chargelist">Select Charge *</label>
                                <select id="chargelist" class="form-control"
                                        ng-model="selectedcharge"
                                        ng-change="getChargeDetails(selectedcharge)">
                                    <option> Select</option>
                                    <option th:each="manualunitcharge:$manuallist"
                                            th:value="$manualunitcharge.pkSetCharges"
                                            th:text="$manualunitcharge.fkAssignCharges.chargeName"></option>
                                </select>
                            </div>

它将调用AngularJS ng-change="getChargeDetails(selectedcharge) 方法,它成功命中控制器,包括选定的数据。并发送数据

@GetMapping(value = "manualbillentry/showmanuallist/chargeid")
private ResponseMsg doFetchManualChargesList(@PathVariable("chargeid")int chargeid,HttpSession session)

    ResponseMsg response = new ResponseMsg();
    WrpSession wrpsession = new WrpSession();
    wrpsession = (WrpSession) session.getAttribute("totalObj");

    try 
        List<EntFlatIncome> unitChargesList = new ArrayList<>();
        unitChargesList = serbilldetails.doFetchManualChargesList(chargeid,wrpsession);
        response.setStatus("success");
        response.setDataObj(unitChargesList);

    
    catch (Exception e)
        e.printStackTrace();
        response.setStatus("failed");
    
    return response;

var app = angular.module('ngapppmanual', []);
app.controller('ngctrlmanual', function($scope, $http, $location) 

    $scope.ngshowchargelist = false;

    $scope.getChargeDetails = function()
    
        var url = $location.absUrl() + "/showmanuallist/" + $scope.selectedcharge;

        var config = 
            headers : 
                'Content-Type' : 'application/json;charset=utf-8;'
            
        

        $http.get(url, config).then(function(response)
        

            if (response.data.status == "success")
            
                $scope.manualresult = response.data.dataObj;
                $scope.ngshowchargelist = true;

             else
                
                $scope.getResultMessage = "Customer Data Error!";
                

        ,
            function(response)
            
            $scope.getResultMessage = "Fail!";
        );

    
);
    我需要在同一个 HTML 页面中加载数据但问题是在响应结果时包含错误代码 500

org.thymeleaf.exceptions.TemplateInputException:解析模板“manualbillentry/showmanuallist/1”时出错,模板可能不存在或可能无法被任何配置的模板解析器访问。

我无法理解这个问题,请有人帮助我...

【问题讨论】:

错误发生在哪一行?您是否完全在弹簧控制器中打断点? 在 Spring 控制器中完美响应数据,但是在 Angular 部分中接收这一行时 --- function(response) $scope.getResultMessage = "Fail!"; ); 这很奇怪,如果你得到500,那么spring控制器没有返回成功。尝试找出它在后端失败的确切位置,您也可以尝试仅从浏览器(而不是从应用程序本身)调用端点或使用 Postman 之类的东西。 @RestController@Controller 是什么控制器?我的猜测是您使用的是 @Controller,它返回 html 而不是您在 angularJS 中所期望的 JSON。 @VenuDuggireddy 你是对的,我将控制器更改为 RestController 对我有用..感谢您的帮助..您可以作为答案发布。请 【参考方案1】:

您正在使用返回 html 的 @Controller,而不是您可以使用 @RestController 返回 angularJS 所期望的 JSON

【讨论】:

以上是关于AngularJS 通过调用 Spring Boot Controller 响应 thymeleaf.exceptions.TemplateInputException的主要内容,如果未能解决你的问题,请参考以下文章

使用 AngularJS $http.post 登录 Spring Boot

Node.js/AngularJS 前端调用 Spring Boot API 后端

spring social facebook + api + angularjs(如何从 angular 调用 -> spring api -> 重定向到 facebook 登录)

AngularJS 和 Spring MVC 安全性

spring-boo hello world程序

通过发布请求,spring boot 和 angularjs 之间的错误请求错误