Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

http status 400

No meu produto controller no método que vai receber o requestmapp do formulário e gravar meu produto no BD, quando eu passo como parâmetro do método um obj do tipo produto, a aplicação não quebra mas eu começo a rececer um status 400. ex:

Funciona normal e retorna as saídas no console e eu recebou uma msg do servidor que n foi possível achar a pagina "ok.jsp", ou seja resultado esperado:

@requestMapping(method = RequestMethod.POST)
public String grava(String  titulo ) {

System.out.println( "acessando o grava" );
System.out.println( titulo );

return "ok";
}

agora se eu mando como parâmetro do método um Produto

@requestMapping(method = RequestMethod.POST)
public String grava(Produto produto ) {

System.out.println( "acessando o grava" );
System.out.println( produto.getTitulo());

return "ok";

não aparece nada no console e a mensagem do servidor é apenas um HTTP STATUS - 400 -

classe controller

@Controller
@RequestMapping("/produtos")
public class ProdutoController {

    @RequestMapping("/form")
    public ModelAndView formCadastraProduto() {

        ModelAndView modelAndView = new ModelAndView("produtos/cadastra");

        return modelAndView;
    }

    @RequestMapping("/lista")
    public ModelAndView listaDeProdutos() {
        ModelAndView modelAndView = new ModelAndView("produtos/lista");

        System.out.println("ois");

        return modelAndView;
    }

    @RequestMapping(method = RequestMethod.POST)
    public String cadastraProduto(Produto produto) {

        System.out.println("acessando@SS");

        return "k";
    }
}

classe produto

@Entity
public class Produto {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id;

    private String titulo;
    private int paginas;
    private String descricao;

    @DateTimeFormat(pattern = "dd/MM/yyyy")
    private BigDecimal preco;

    private Calendar dataLancamento;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getTitulo() {
        return titulo;
    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    public int getPaginas() {
        return paginas;
    }

    public void setPaginas(int paginas) {
        this.paginas = paginas;
    }

    public String getDescricao() {
        return descricao;
    }

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

    public BigDecimal getPreco() {
        return preco;
    }

    public void setPreco(BigDecimal preco) {
        this.preco = preco;
    }

    public Calendar getDataLancamento() {
        return dataLancamento;
    }

    public void setDataLancamento(Calendar dataLancamento) {
        this.dataLancamento = dataLancamento;
    }

    @Override
    public String toString() {
        return "Produto [id=" + id + ", titulo=" + titulo + ", paginas=" + paginas + ", descricao=" + descricao
                + ", preco=" + preco + ", dataLancamento=" + dataLancamento + "]";
    }

}

formulario:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ include file="/WEB-INF/views/template-head.jsp"%>

    <form action="${s:mvcUrl('PC#cadastraProduto').build() }" method="post" class="form-horizontal">
        <fieldset>

            <!-- Form Name -->
            <legend>Cadastre seu Livro</legend>

            <!-- Text input-->
            <div class="form-group">
                <label class="col-md-4 control-label" for="titulo">Titulo:</label>
                <div class="col-md-4">
                    <input name="titulo" type="text" class="form-control input-md">
                </div>
            </div>

            <!-- Text input-->
            <div class="form-group">
                <label class="col-md-4 control-label" for="paginas">paginas:</label>
                <div class="col-md-4">
                    <input name="paginas" type="number" class="form-control input-md">
                </div>
            </div>

            <!-- Textarea -->
            <div class="form-group">
                <label class="col-md-4 control-label" for="descricao">Descrição</label>
                <div class="col-md-4">
                    <textarea class="form-control" name="descricao"></textarea>
                </div>
            </div>

            <!-- preco input-->
            <div class="form-group">
                <label class="col-md-4 control-label" for="preco">Preço:</label>
                <div class="col-md-4">
                    <input name="preco" type="number" class="form-control input-md">
                </div>
            </div>

            <!-- Date input-->
            <div class="form-group">
                <label class="col-md-4 control-label" for="dataLancamento">Lançamento:</label>
                <div class="col-md-4">
                    <input name="dataLancamento" type="date" class="form-control input-md">
                </div>
            </div>

            <!-- Button -->
            <div class="form-group">
                <label class="col-md-4 control-label" for="Confirma"></label>
                <div class="col-md-4">
                    <button type="submit" class="btn btn-primary">Confirma</button>
                </div>
            </div>

        </fieldset>
    </form>
</body>
</html>
5 respostas

acho que o spring pode estar se perdendo pra fazer o biding e eu n sei se esqueci de configurar alguma coisa, estou pesquisando em outros fóruns mas sei que o pessoal daqui é 10, então estou postando aqui tmbm.

OBS: todos os outros metodos da minhas classes controller estão funcionando, exceto esse quando eu passo esse parâmetro de Produto para o método.

solução!

eh realmente algum problema na hora de popular o objeto.. a primeira coisa eh que essa annotation @DateTimeFormat(pattern = "dd/MM/yyyy") devia estar em cima do calendar..

A segunda eh que o input do tipo date nao vai passar a data nesse formato e sim no yyyy-MM-dd.

Cara que falta de atenção !!!

Acho que vou me dar um diazinho de folga dos estudos acho que estou meio pilhado pra deixar uma bobagem dessas passar.

Lembrei que é preciso configurar um Bean para cuidar das conversões de data, e a parte do pattern do date foi total falta de atenção !

Obrigado Alberto !