Restful Angular

Asked

Viewed 354 times

0

I’m developing a system with angular, java and restful jersey. However, I can’t show the Rest data in the view using angular. The most I can do is generate multiple objects for each letter it contains in the Rest XML and not the return of the data itself. I have tried to form several, searched in the net, and those that I can show something the return is the same, objects generated from what has written in the xml of the Rest. Could someone shed some light? They follow parts of the codes.

Service.js

    angular.module('meusServicos', ['ngResource'])
.factory('recursoProduto', function($resource){ //retorna um objeto
    return $resource('rest/produtos/:produtoId', null,{
            update:{
                method: 'PUT', params: {id: '@id'}
            }
    });
})


.factory('ProdutoFactory', function ($resource) {
    console.log('entrou');

    return $resource('/listacarrinho/rest/produtos/', {}, {
        query: {
            method: 'GET',
            params: {},
            isArray: false,

        }
    });
})

Controller js

var app = angular.module('rest.controllers', []);
angular.module('listacompras').controller('ProdutosController',
    function($scope, recursoProduto,ProdutoFactory){

    $scope.produtos = [];
    $scope.filtro = '';
    $scope.mensagem='';

$scope.produtos = ProdutoFactory.get();
     console.log($scope.produtos)

//aqui já tentei substituir por query mas o angular da erro.

Where will I show the data

<meu-painel class="col-md-2 animacao-painel" ng-repeat="produto in produtos | filter: filtro"
            titulo="{{produto.titulo}}">
                <meu-produto url="{{produto.url}}" titulo="{{produto.titulo}}" qtd="{{produto.qtd}}" valor="{{produto.valor}}" total="{{produto.total}}">
                </meu-produto>
                <a href="produtos/edit/{{produto.id}}" class="btn btn-primary btn-block">Editar</a>

                <meu-botao-remover nome="Remover" acao="remover(produto)">
                </meu-botao-remover>
            </meu-painel> <!--final do panel-->

XML

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<produtoHTTPs>
<ProdutoHTTP>
<id>1</id>
<qtd>3</qtd>
<titulo>Teste</titulo>
<total>13.5</total>
<url>teste</url>
<valor>4.5</valor>
</ProdutoHTTP>

main

<div class="jumbotron">
            <h1 class="text-center">Lista de Compras</h1>
        </div>
        <div class="row">
            <div class="col-md-12">
            <!-- Caso false o ng-show="mensagem.length" não mostrará mensagem (em caso de length for null)-->
            <p ng-show="mensagem.length" class="alert alert-info">{{mensagem}}</p>
                <form>
                    <div class="input-group">
                    <span class="input-group-btn">
                        <a href="produtos/new" class="btn btn-primary" type="button">
                            Adicionar Produto
                        </a>
                    </span>
                    <input ng-model="filtro" ng-model-options="{debounce:500}" class="form-control" placeholder="Digite para filtrar seu produto"> <!-- debounce aplica um delay para aguardar a aplicação do filtro -->   
                    </div>
                </form>
            </div> <!-- end colunm-->
        </div> <!--end row-->

    <div class="panel-group" class="col-md-12"> 
            <div class="row">
                <h2 class="text-center">Meu carrinho de compras</h2>
            </div>
            <meu-painel class="col-md-2 animacao-painel" ng-repeat="produto in produtos | filter: filtro"
            titulo="{{produto.titulo}}">
                <meu-produto url="{{produto.url}}" titulo="{{produto.titulo}}" qtd="{{produto.qtd}}" valor="{{produto.valor}}" total="{{produto.total}}">
                </meu-produto>
                <a href="produtos/edit/{{produto.id}}" class="btn btn-primary btn-block">Editar</a>

                <meu-botao-remover nome="Remover" acao="remover(produto)">
                </meu-botao-remover>
            </meu-painel> <!--final do panel-->
</div>


</html>

Rest

package rest;

import java.util.ArrayList;
import java.util.List;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import org.glassfish.jersey.process.internal.RequestScoped;

import dao.ProdutoDAO;
import http.ProdutoHTTP;
import model.Produto;

/**
 * Essa classe vai expor os métodos para serem acessasdos via http
 * 
 * @Path - Caminho para a chamada da classe que vai representar o nosso serviço
 * */

@RequestScoped
//@ApplicationPath("/listacarrinho")
@Path("/produtos")
public class ProdutoController {



    private final  ProdutoDAO repository = new ProdutoDAO();

        /**
         * @Consumes - determina o formato dos dados que vamos postar
         * @Produces - determina o formato dos dados que vamos retornar
         * 
         * Esse método cadastra uma nova pessoa
         * */
        @POST   
        @Consumes("application/json; charset=UTF-8")
        @Produces("application/json; charset=UTF-8")
        @Path("/new")
        public String Cadastrar(Produto produto){

            Produto entity = new Produto();

            try {

                //entity.setId(produto.getId());
                entity.setTitulo(produto.getTitulo());
                entity.setUrl(produto.getUrl());
                entity.setQtd(produto.getQtd());
                entity.setValor(produto.getValor());
                entity.setTotal(produto.getTotal());
                repository.adiciona(entity);

                return "Registro adicionado com sucesso!";

            } catch (Exception e) {

                return "Erro ao adicionar um registro " + e.getMessage();
            }

        }

        /**
         * Essse método altera uma pessoa já cadastrada
         * **/
        @PUT
        @Path("/edit/{id}")
        @Consumes(MediaType.APPLICATION_JSON)
        @Produces(MediaType.APPLICATION_JSON)
        public String Update(Produto produto){

            Produto entity = new Produto();

            try {

                entity.setTitulo(produto.getTitulo());
                entity.setUrl(produto.getUrl());
                entity.setQtd(produto.getQtd());
                entity.setValor(produto.getValor());
                entity.setTotal(produto.getTotal());
                repository.atualiza(entity);

                return "Registro alterado com sucesso!";

            } catch (Exception e) {

                return "Erro ao alterar o registro " + e.getMessage();

            }

        }
        /**
         * Esse método lista todas pessoas cadastradas na base
         * */
        @GET
        @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})

        public List<ProdutoHTTP> TodosProdutos(){
            System.out.println("entrou no get");

            List<ProdutoHTTP> produtos =  new ArrayList<ProdutoHTTP>();

            List<Produto> listaProdutos = repository.listaTodos();

            for (Produto entity : listaProdutos) {

                produtos.add(new ProdutoHTTP(entity.getId(), entity.getTitulo(),entity.getUrl(),entity.getQtd(),
                        entity.getValor(),entity.getTotal()));
            }

            return produtos;
        }

        /**
         * Esse método busca uma pessoa cadastrada pelo código
         * */
        @GET
        @Produces("application/json; charset=UTF-8")
        @Path("/{id}")
        public ProdutoHTTP buscaPorId(@PathParam("id") Integer id){

            Produto entity = repository.buscaPorId(id);

            if(entity != null)
                return new ProdutoHTTP(entity.getId(), entity.getTitulo(),entity.getUrl(),entity.getQtd(),
                        entity.getValor(),entity.getTotal());

            return null;
        }

        /**
         * Excluindo uma pessoa pelo código
         * */
        @DELETE
        @Produces("application/json; charset=UTF-8")
        @Path("/{id}")  
        public String Excluir(@PathParam("id") Integer id){

            try {

                repository.remove(id);

                return "Registro excluido com sucesso!";

            } catch (Exception e) {

                return "Erro ao excluir o registro! " + e.getMessage();
            }

        }


}

Does anyone know why it doesn’t show the object with the correct data but generates an object for each letter of xml? What’s wrong with the code? Thank you so much for your help!!

inserir a descrição da imagem aqui

  • You can’t make one minimum, complete and verifiable example so that we can find a way to help you? That the way you are would just be kicks.

  • @Sorack, I’m gonna try to put in more of the code to see if it helps. But I have a panel that shows the product in index... this panel repeats to when add a new product, it also appears in index. It happens that when I am searching in the database (with restful) the panel is filled with products and when I check in the console, each product corresponds to a letter of the Rest xml.

  • Ah tah dude, you’re getting an XML. JS works with JSON, not XML. You have to convert

  • @Sorack thought that when you put @Produces({Mediatype.APPLICATION_JSON, Mediatype.APPLICATION_XML}) into the Rest class, it doesn’t convert?

  • Here is the result of the console.log?

  • @Sorack is assigned a product in the panel for each XML letter. Look at the response in the console... "<" 1 : "?" 2 : "x" 3 : "m" 4 : "l" 5 : " " 6 : "v" ... and this repeats for each character of the generated xml of the Rest...generates 466 products in the panel

  • I touched the answer. See if it works

  • @Sorack Nada. It keeps returning the same data... I even checked in the browser console to see if it was importing the script but it is normal but the answer keeps coming xml... =/ I will add the image with the result in the topic

  • Good then is your service the problem

  • @Sorack but would be the js service or something in the Rest java class?

Show 5 more comments

2 answers

0

Try to change that line: @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})

of your Rest for that:

@Produces({MediaType.APPLICATION_JSON})

0


You are requesting a path that does not exist "/listacarrinho/rest/produtos/".

Put that way like this /rest/produtos/listacarrinho and in the method of the Rest service, adds the @Path("/listacarrinho").

In the @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) leaves only the Application_json, and tries to change the return type to Sponse. this should work.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.