Deploy de .war no SpringBoot não funciona. Mostra erro 404

O erro parece ser relacionado ao thymeleaf mas não sei como resolver, pela ide não dá esse erro.

Seu controller está manipulando String pura, se você está utilizando thymeleaf você não deveria trabalhar com ModelAndView?

mas nao estou usando thymeleaf, apenas html, bootestrap e javascript, o que me deixa confuso é que na ide tudo funciona. “/index” deveria apontar para o index.html

Mas se você não está usando thymeleaf o erro no console não faz sentido! :confused:

Em qual pasta no projeto vc está colocando suas páginas html?

estão na pasta templates (padrão)

Pois é, esse é meu primeiro projeto usando spring e to estudando sozinho, pode ser que tenha feito alguma config errada em relacão ao thymeleaf

Vc poderia postar uma dessas páginas pra gente ver?

claro, posso enviar o projeto também se precisar

<!DOCTYPE html>

<html lang="pt-br" xmlns="http://www.w3.org/1999/xhtml" xmlns:th="https://www.thymeleaf.org"
	xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity3">

<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<link rel="icon" type="image/png" sizes="96x96" href="assets/img/favicon.png">
	<title>Masterplast Indústria e Comércio de Plásticos Ltda</title>

	<!-- Google Font: Source Sans Pro -->
	<link rel="stylesheet"
		href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700&display=fallback">
<!-- Font Awesome -->
<link rel="stylesheet" href="plugins/fontawesome-free/css/all.min.css">
	<!-- Theme style -->
	<link rel="stylesheet" href="dist/css/adminlte.css">
	<!-- Daterange picker -->
	<script type="text/javascript" src="https://cdn.jsdelivr.net/jquery/latest/jquery.min.js"></script>
	<!-- home -->
	<script type="text/javascript" src="dist/js/home.js"></script>
	<script type="text/javascript" src="dist/js/usuario.js"></script>
	<script type="text/javascript" src="dist/js/notificacao.js"></script>
	<script type="text/javascript" src="dist/js/maquina.js"></script>
	<script type="text/javascript" src="dist/js/moment.js"></script>
	<script type="text/javascript" src="dist/js/links.maquinas.js"></script>
</head>

<body class="hold-transition sidebar-mini layout-fixed">
	<div class="wrapper">

		<!-- Navbar -->
		<nav class="main-header navbar navbar-expand navbar-white navbar-light">
			<!-- Left navbar links -->
			<ul class="navbar-nav" id="linkMaquinasAtivas">
				<!-- preenchido com jquery -->
			</ul>

			<!-- Right navbar links -->
			<ul class="navbar-nav ml-auto">
				<!-- Navbar Search -->
				<li class="nav-item">
					<a class="nav-link" data-widget="navbar-search" href="#" role="button">
						<i class="fa fa-search"></i>
					</a>
					<div class="navbar-search-block">
						<form class="form-inline">
							<div class="input-group input-group-sm">
								<input class="form-control form-control-navbar" type="search" placeholder="Buscar"
									aria-label="Search">
								<div class="input-group-append">
									<button class="btn btn-navbar" type="submit">
										<i class="fa fa-search"></i>
									</button>
									<button class="btn btn-navbar" type="button" data-widget="navbar-search">
										<i class="fa fa-times"></i>
									</button>
								</div>
							</div>
						</form>
					</div>
				</li>

				<!-- Notifications Dropdown Menu -->
				<li class="nav-item dropdown" id="notificacoes">
					<!-- preenchido com jquery -->
				</li>
				<!-- User Dropdown Menu -->
				<li class="nav-item dropdown">
					<a class="nav-link" data-toggle="dropdown" href="#">
						<i class="fa fa-user"></i><span id="user"></span>
					</a>
					<div class="dropdown-menu dropdown-menu-lg dropdown-menu-right">
						<span class="dropdown-header">Opções</span>
						<div class="dropdown-divider"></div>
						<a href="/master/trocarsenha" class="dropdown-item">
							<i class="fa fa-lock mr-2"></i> Trocar a Senha
						</a>
						<div class="dropdown-divider"></div>
						<a href="#" class="dropdown-item" id="sair">
							<form th:action="@{/logout}" method="post" id="form">
								<i class="fa fa-sign-out mr-2"></i> Sair
							</form>
						</a>
					</div>
				</li>
			</ul>
		</nav>
		<!-- /.navbar -->

		<!-- Main Sidebar Container -->
		<aside class="main-sidebar sidebar-dark-primary elevation-4">
			<!-- Brand Logo -->
			<a href="/master/home" class="brand-link">
				<img src="dist/img/user-medium.png" alt="Masterplast Logo" class="brand-image" style="opacity: .8">
				<span class="brand-text font-weight-light">Masterplast</span>
			</a>

			<!-- Sidebar -->
			<div class="sidebar" id="">

				<!-- SidebarSearch Form -->
				<div class="form-inline">
					<div class="input-group" data-widget="sidebar-search">
						<input class="form-control form-control-sidebar" type="search" placeholder="Buscar"
							aria-label="Search">
						<div class="input-group-append">
							<button class="btn btn-sidebar">
								<i class="fa fa-search fa-fw"></i>
							</button>
						</div>
					</div>
				</div>
				<!-- Sidebar Menu -->
				<nav class="mt-2">
					<ul class="nav nav-pills nav-sidebar flex-column"
						data-widget="treeview" role="menu" data-accordion="false">
						<!-- Add icons to the links using the .nav-icon class
               			with font-awesome or any other icon font library -->
						<li class="nav-header">PRODUÇÃO</li>
						<li class="nav-item"><a href="#" class="nav-link"> <i
								class="nav-icon fa fa-desktop"></i>
								<p>
									Programação <i class="right fa fa-angle-left"></i>
								</p>
						</a>
							<ul class="nav nav-treeview">
								<li class="nav-item"><a href="programar"
									class="nav-link"> <i class="fa fa-shopping-cart nav-icon"></i>
										<p>Por Pedido</p>
								</a></li>
								<li class="nav-item"><a href="sugeridos"
									class="nav-link"> <i class="fa fa-bookmark nav-icon"></i>
										<p>Itens Sugeridos</p>
								</a></li>
								<li class="nav-item"><a href="reservas"
									class="nav-link"> <i class="fa fa-archive nav-icon"></i>
										<p>Reservas</p>
								</a></li>
							</ul></li>
							<li class="nav-item"><a href="#" class="nav-link"> <i
								class="nav-icon fa fa-industry"></i>
								<p>
									Produção <i class="right fa fa-angle-left"></i>
								</p>
						</a>
							<ul class="nav nav-treeview">
								<li class="nav-item"><a href="produzidos"
									class="nav-link"> <i class="fa fa-circle nav-icon"></i>
										<p>Produzidos</p>
								</a></li>
								<li class="nav-item"><a href="conferidos"
									class="nav-link"> <i class="fa fa-check nav-icon"></i>
										<p>Conferidos</p>
								</a></li>
								<li class="nav-item"><a href="lancados"
									class="nav-link"> <i class="fa fa-rocket nav-icon"></i>
										<p>Lancados</p>
								</a></li>
							</ul></li>
						<li class="nav-item"><a href="#" class="nav-link"> <i
								class="nav-icon fa fa-cogs"></i>
								<p>
									Máquinas <i class="fa fa-angle-left right"></i>
								</p>
						</a>
							<ul class="nav nav-treeview" id="menu_lateral_maquinas">
								<!-- preenchido com jquery -->
							</ul></li>
						<li class="nav-header">LOGÍSTICA</li>
						<li class="nav-item"><a href="#" class="nav-link"> <i
								class="nav-icon fa fa-file"></i>
								<p>
									Acompanhamento <i class="fa fa-angle-left right"></i>
								</p>
						</a>
							<ul class="nav nav-treeview">
								<li class="nav-item"><a href="coletas" class="nav-link">
										<i class="fa fa-truck nav-icon"></i>
										<p>Coletas</p>
								</a></li>
							</ul></li>
						<li class="nav-header">MATERIAIS</li>
						<li class="nav-item"><a href="#" class="nav-link"> <i
								class="nav-icon fa fa-file"></i>
								<p>
									Estoque <i class="fa fa-angle-left right"></i>
								</p>
						</a>
							<ul class="nav nav-treeview">
								<li class="nav-item"><a href="saldos" class="nav-link">
										<i class="fa fa-bars nav-icon"></i>
										<p>Saldos</p>
								</a></li>
							</ul></li>
						<li class="nav-header">DIVERSOS</li>
						<li class="nav-item"><a href="#" class="nav-link"> <i
								class="nav-icon fa fa-edit"></i>
								<p>
									Cadastros <i class="fa fa-angle-left right"></i>
								</p>
						</a>
							<ul class="nav nav-treeview">
								<li class="nav-item"><a href="engenharia"
									class="nav-link"> <i class="fa fa-list nav-icon"></i>
										<p>Engenharia</p>
								</a></li>
								<li class="nav-item"><a href="funcionarios"
									class="nav-link"> <i class="fa fa-users nav-icon"></i>
										<p>Funcionários</p>
								</a></li>
								<li class="nav-item"><a href="impressoras"
									class="nav-link"> <i class="fa fa-print nav-icon"></i>
										<p>Impressoras</p>
								</a></li>
								<li class="nav-item"><a href="maquinas"
									class="nav-link"> <i class="fa fa-cogs nav-icon"></i>
										<p>Máquinas</p>
								</a></li>
								<li class="nav-item"><a href="bobinadeiras"
									class="nav-link"> <i class="fa fa-cube nav-icon"></i>
										<p>Bobinadeiras</p>
								</a></li>
								<li class="nav-item"><a href="turnos" class="nav-link">
										<i class="fa fa-calendar nav-icon"></i>
										<p>Turnos</p>
								</a></li>
								<li class="nav-item"><a href="usuarios"
									class="nav-link"> <i class="fa fa-user nav-icon"></i>
										<p>Usuários</p>
								</a></li>
							</ul></li>
					</ul>
				</nav>
				<!-- /.sidebar-menu -->
			</div>
			<!-- /.sidebar -->
		</aside>

		<!-- Content Wrapper. Contains page content -->
		<div class="content-wrapper">
			<!-- Content Header (Page header) -->
			<div class="content-header">
				<div class="container-fluid">
					<div class="row mb-2">
						<div class="col-sm-6">
							<h1 class="m-0">Resumo de hoje</h1>
						</div><!-- /.col -->
					</div><!-- /.row -->
				</div><!-- /.container-fluid -->
			</div>
			<!-- /.content-header -->

			<!-- Main content -->
			<div class="content">
				<div class="container-fluid">
					<div class="row">
						<div class="col-lg-3 col-6">
							<!-- small box -->
							<div class="small-box bg-info">
								<div class="inner">
									<h3 id="nroPedidosGeradosHoje">0</h3>
									<p>Pedidos Gerados Hoje</p>
								</div>
								<div class="icon">
									<i class="ion ion-bag"></i>
								</div>
								<!--<a href="#" class="small-box-footer">Mais detalhes <i
										class="fa fa-arrow-circle-o-right"></i></a>-->
							</div>
						</div>
						<!-- ./col -->
						<div class="col-lg-3 col-6">
							<!-- small box -->
							<div class="small-box bg-info">
								<div class="inner">
									<h3 id="valorVendidoHoje">R$ 0,00</h3>
									<p>Vendido Hoje</p>
								</div>
								<div class="icon">
									<i class="ion ion-stats-bars"></i>
								</div>
								<!--<a href="#" class="small-box-footer">Mais detalhes <i
										class="fa fa-arrow-circle-o-right"></i></a>-->
							</div>
						</div>
						<!-- ./col -->
						<div class="col-lg-3 col-6">
							<!-- small box -->
							<div class="small-box bg-info">
								<div class="inner">
									<h3 id="valorFaturadoHoje"> R$ 0,00</h3>
									<p>Faturado Hoje</p>
								</div>
								<div class="icon">
									<i class="ion ion-person-add"></i>
								</div>
								<!--<a href="#" class="small-box-footer">Mais detalhes <i
										class="fa fa-arrow-circle-o-right"></i></a>-->
							</div>
						</div>
						<!-- ./col -->
						<div class="col-lg-3 col-6">
							<!-- small box -->
							<div class="small-box bg-info">
								<div class="inner">
									<h3 id="valorFaturadoMensal">R$ 0,00</h3>
									<p>Faturado Mensal</p>
								</div>
								<div class="icon">
									<i class="ion ion-pie-graph"></i>
								</div>
								<!--<a href="#" class="small-box-footer">Mais detalhes <i
										class="fa fa-arrow-circle-o-right"></i></a>-->
							</div>
						</div>
						<!-- ./col -->
					</div>
					<!-- /.row -->
					<div class="card">
						<div class="card-header">
							<h3 class="card-title">Vendas recentes</h3>
							<div class="card-tools">
								<input type="date" name="data_pedidos" id="data_pedidos" />
								<button type="button" class="btn btn-primary btn-sm" onclick="listaPedidosPorData()">
									<i class="fa fa-search"></i>
								</button>
								<button type="button" class="btn btn-primary btn-sm" data-card-widget="collapse"
									title="Collapse">
									<i class="fa fa-minus"></i>
								</button>
							</div>
						</div>
						<!-- /.card-header -->
						<div class="card-body p-0">
							<table class="table" id="tabela_pedidos">
								<thead>
									<tr>
										<th>Pedido</th>
										<th>Un</th>
										<th>Cliente</th>
										<th>Vendedor</th>
										<th>Valor</th>
										<th>Data/Hora</th>
										<th>Faturamento</th>
										<th>Produção</th>
										<th>Logística</th>
									</tr>
								</thead>
								<tbody>
									<!--preenche com jquery-->
								</tbody>
							</table>
						</div>
						<!-- /.card-body -->
					</div>
					<!-- /.card -->
				</div><!-- /.container-fluid -->
			</div>
			<!-- /.content -->
		</div>
		<!-- /.content-wrapper -->

		<!-- Main Footer -->
		<footer class="main-footer">
			<!-- To the right -->
			<div class="float-right d-none d-sm-inline">
				Desenvolvido por Vagner Mocelin
			</div>
			<!-- Default to the left -->
			<strong>Copyright &copy; 2003-2022 <a href="https://www.masterplastfitas.com.br">Masterplast</a>.</strong>
			Todos os direitos reservados.
		</footer>
	</div>
	<!-- ./wrapper -->

	<!-- REQUIRED SCRIPTS -->

	<!-- jQuery -->
	<script src="plugins/jquery/jquery.min.js"></script>
	<!-- Bootstrap 4 -->
	<script src="plugins/bootstrap/js/bootstrap.bundle.min.js"></script>
	<!-- AdminLTE App -->
	<script src="dist/js/adminlte.min.js"></script>
	<!-- Tempusdominus Bootstrap 4 -->
	<script src="plugins/tempusdominus-bootstrap-4/js/tempusdominus-bootstrap-4.min.js"></script>
		<!-- Toastr -->
	<script src="plugins/toastr/toastr.min.js"></script>

</body>
<script>
$("#sair").click(function(){
	form.submit();
});
</script>
<script>
$(window).on("load", function() {
	ContarSegundos();
});

function ContarSegundos() {
	carregaNotificacaoesNaoNotificadas();
	nroPedidosGeradosHoje();
	valorVendidoHoje();
	valorFaturadoHoje();
	valorFaturadoMensal();
}
setInterval(ContarSegundos, 10000);
</script>

<div class="modal fade" id="itens">
	<div class="modal-dialog modal-lg">
		<div class="modal-content">
			<div class="modal-header">
				<h4 class="modal-title" id="titulo"></h4>
				<button type="button" class="close" data-dismiss="modal"
					aria-label="Close">
					<span aria-hidden="true">&times;</span>
				</button>
			</div>
			<div class="modal-body">
				<table class="table table-striped" id="tabela_itens">
					<thead>
						<tr>
						<th>Item</th>
							<th>Código</th>
							<th>Descrição</th>
							<th>Quantia</th>
						</tr>
					</thead>
					<tbody>
						<!--preenche com jquery-->
					</tbody>
				</table>
			</div>
			<div class="modal-footer justify-content-between">
				<button type="button" class="btn btn-default" data-dismiss="modal">Fechar</button>
			</div>
		</div>
		<!-- /.modal-content -->
	</div>
	<!-- /.modal-dialog -->
</div>
<!-- /.modal -->
</html>

Bem no começo cita o thymeleaf mas como foi gerado pela ide nao mexi, e rodando a aplicacao pela ide funciona perfeito.

tentei desativar o thymeleaf no application.properties mas ai ele retorna a string ao inves da pagina com esse nome

Consegui!

O problema era realmente na rota:
estava assim:

package br.com.masterplastfitas.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class RotaHomeController {
	@GetMapping("/home")
	public String index() {
		return"/home";
	}
}

ficou assim:

package br.com.masterplastfitas.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class RotaHomeController {
	@GetMapping("/home")
	public ModelAndView home() {
		return new ModelAndView("home");
	}
}

Muito obrigado @Jonathan_Medeiros e @Lucas_Camara

2 curtidas