Não consigo persistir meu objeto Spring

3 respostas
javaspring
D

estou aprendendo Spring MVC e estou tentar persistir mais não está dando certo,

pow

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.algaworks</groupId>
<artifactId>cobranca</artifactId>
<version>1.0.0-SNAPSHOT</version>

<packaging>war</packaging>

<name>cobranca</name>
<description></description>

<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>1.3.1.RELEASE</version>
	<relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	<java.version>1.8</java.version>
</properties>

<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-data-jpa</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-thymeleaf</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
	
	<dependency>
		<groupId>com.h2database</groupId>
		<artifactId>h2</artifactId>
		<scope>runtime</scope>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-tomcat</artifactId>
		<scope>provided</scope>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-test</artifactId>
		<scope>test</scope>
	</dependency>
	
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-devtools</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-undertow</artifactId>
	</dependency>
	<dependency>
		<groupId>ch.qos.logback</groupId>
		<artifactId>logback-access</artifactId>
	</dependency>
</dependencies>

<build>
	<plugins>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
		</plugin>
	</plugins>
</build>
</project>

Entidade

package com.algaworks.cobranca.model;

import java.math.BigDecimal;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.format.annotation.NumberFormat;

@Entity
public class Titulo {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long codigo;
	private String descricao;
	
	@Column(name="data_vencimento")
	@DateTimeFormat(pattern="dd/MM/yyyy")
	@Temporal(TemporalType.DATE)
	private Date dataVencimento;
	
	@NumberFormat(pattern="#,##0.00")
	private BigDecimal valor;
	
	@Enumerated(EnumType.STRING)
	@Column(name = "satus_titulo")
	private StatusTitulo StatusTitulo;

	public Long getCodigo() {
		return codigo;
	}

	public void setCodigo(Long codigo) {
		this.codigo = codigo;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public Date getDataVencimento() {
		return dataVencimento;
	}

	public void setDataVencimento(Date dataVencimento) {
		this.dataVencimento = dataVencimento;
	}

	public BigDecimal getValor() {
		return valor;
	}

	public void setValor(BigDecimal valor) {
		this.valor = valor;
	}

	public StatusTitulo getStatusTitulo() {
		return StatusTitulo;
	}

	public void setStatusTitulo(StatusTitulo statusTitulo) {
		StatusTitulo = statusTitulo;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((codigo == null) ? 0 : codigo.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Titulo other = (Titulo) obj;
		if (codigo == null) {
			if (other.codigo != null)
				return false;
		} else if (!codigo.equals(other.codigo))
			return false;
		return true;
	}

}

controller
    package com.algaworks.cobranca.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.algaworks.cobranca.model.Titulo;
import com.algaworks.cobranca.repository.Titulos;

@Controller
@RequestMapping("/titulos")
public class TituloController {
	
	@Autowired //injeta
	private Titulos titulos;
	
	@RequestMapping("/novo")
	public String novo() {
		return "CadastroTitulo";
	}
	
	@RequestMapping(method = RequestMethod.POST)
	public String salvar(Titulo titulo){
		
		titulos.save(titulo);
		return "CadastroTitulo";
	}
}

html
    <html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8"/>
<title>Cadastro de título</title>
<link rel="stylesheet" type="text/css" href="/css/bootstrap.min.css"/>
<link rel="stylesheet" type="text/css" href="/css/style.css"/>
</head>
<body>
	<nav class="navbar navbar-inverse navbar-static-top">
        <div class="container-fluid">
            <div class="navbar-header">
                <a class="navbar-brand" href="#">
                   
                </a>
            </div>
        </div>
    </nav>
    
    <form class="form-horizontal" method="POST" action="/titulos">
    	<div class="panel panel-default">
    		<div class="panel-heading">
    			<h1 class="panel-title">Novo título</h1>
    		</div>
    		
    		<div class="panel-body">
				<div class="form-group">
					<label for="descricao" class="col-sm-2 control-label">Descrição</label>
					<div class="col-sm-4"> 
						<input type="text" class="form-control" id="descricao" name="descricao"/>
					</div>
				</div>
				<div class="form-group">
					<label for="dataVencimento" class="col-sm-2 control-label">Data de vencimento</label>
					<div class="col-sm-2">  
						<input type="text" class="form-control"	id="dataVencimento" name="dataVencimento"/>
					</div>
				</div>
				<div class="form-group">
					<label for="valor" class="col-sm-2 control-label">Valor</label>
					<div class="col-sm-2">   
						<input type="text" class="form-control" id="valor" name="valor"/>
					</div>
				</div>
				<div class="form-group">
					<label for="status" class="col-sm-2 control-label">Status</label>
					<div class="col-sm-2">
						<select class="form-control" name="StatusTitulo">
							<option value="PENDENTE">Pendente</option>
							<option value="RECEBIDO">Recebido</option>
                    	</select>
                    </div>
				</div>
				<div class="form-group">
					<div class="col-sm-offset-2 col-sm-10">
						<button type="submit" class="btn btn-primary">Salvar</button>
					</div>
				</div>
			</div>
    	</div>
    </form>

<script src="/js/bootstrap.min.js"></script>
</body>
</html>

3 Respostas

A

Fala @Dayson_Rodrigues, então, como você sabe que o título não está sendo cadastrado? Está visualizando o registro direto no DB?

Se sim, e não estiver lá, você pode olhar o log da aplicação e vê se há alguma exceção acontecendo.

Uma coisa que não ví no seu post foi o código do Repository Titulos. É ele que é a camada de persistência e se ele estiver mal configurado o problema pode estar aí. Então faça 2 coisas:

1-Refaça o cadastro e se possível compartilhe conosco o seu log de aplicação.
2-Compartilhe conosco sua classe Titulos

OBS: faça ambos acima editando a pergunta.

I

Compartilha o código do seu método save da classe “Titulos”. Recomendação: Título e Titulos é muito parecido, o melhor pro repository é fazer algo como TituloRepository, TituloDAO, etc…

@Enumerated(EnumType.STRING)
	@Column(name = "satus_titulo")
	private StatusTitulo StatusTitulo;

No seu banco de dados, a coluna está escrito errado mesmo: satus ?

D

na hora que vou subir o projeto, ao tentar preencher o formulário quando submeto ele não cria a entidade.

Criado 14 de março de 2017
Ultima resposta 14 de mar. de 2017
Respostas 3
Participantes 3