1
resposta

/pedido/novo vs /pedido/formulario - erros

Estou com problemas nessa aula.

Como o professor consegue acessar /pedido/novo se ela é somente POST? Se eu acesso pedido/formulario, tomo uma exception Neither BindingResult nor plain target object for bean name 'novoPedidoDTO' available as request attribute. Se eu entro em /pedido/novo, tomo um Request method 'GET' not supported.

Seria talvez uma mudança de versão desde que a aula foi lançada?

HTML:

<form th:object="${novoPedidoDTO}" method="POST" action="novo">
                <div>
                    <label for="nomeProduto">Produto</label>
                    <input th:field="*{nomeProduto}">
                    <small>Informe o nome do produto.</small>
                </div>

                <div>
                    <label for="urlProduto">URL do produto</label>
                    <input th:field="*{urlProduto}">
                    <small>Informe a URL do produto.</small>
                </div>

                <div>
                    <label for="urlImagem">URL do produto</label>
                    <input th:field="*{urlImagem}">
                    <small>Informe a URL da imagem do produto.</small>
                </div>

                <div>
                    <label for="descricao">Descrição</label>
                    <textarea th:field="*{descricao}"></textarea>
                    <small>Informe uma descrição do produto.</small>
                </div>

                <input type="submit" value="Cadastrar">
            </form>

Controller:

@GetMapping("formulario")
    public String formulario() {
        return "pedido/formulario";
    }

    @PostMapping("novo")
    public String novo(@Valid NovoPedidoDTO novoPedido, BindingResult result) {
        if (result.hasErrors()) {
            return "pedido/formulario";
        }

        Pedido pedido = novoPedido.toPedido();
        pedidoRepository.saveAndFlush(pedido);

        return "pedido/formulario";
    }
1 resposta

Olá Matheus, blz? Também gastei uns minutos tentando entender e pesquisei algumas alternativas e nada resolvia, até porque a codigicação estava correta. Bem, na próxima aula a resposta é dada rsrs. Inclua sua classe NovoPedidoDTO novoPedido como parâmetro da action que resolve a requisição "formulario". Ficará assim:

@GetMapping("formulario")
public String formulario(NovoPedidoDTO novoPedido ) {
        return "pedido/formulario";
    }

Isto é preciso porque ao acessar a url pedido/form o thymeleaf tenta obter um atributo novoPedido mas ainda não existe na requisição.

Abraço.