Code Monkey home page Code Monkey logo

rdswithapirest's Issues

Inclusão Anotação @PathVariable - Classe EmployeeControllerHateoas.java

Olá Juliana,

Ao tentar realizar teste no postman com o método PUT implementado na Classe EmployeeControllerHateoas.java
Estava ocorrendo erro me indicando que o ID que estava recebendo era NULL.
Então coloquei anotação @PathVariable no parâmetro ID do método replaceEmployee dessa forma.

@PutMapping("/employees/update/{id}")
    EmployeeHateoas replaceEmployee(@RequestBody EmployeeHateoas newEmployee, @PathVariable Long id){
        return repository.findById(id).map(employee -> {
            employee.setName(newEmployee.getName());
            employee.setAddress(newEmployee.getAddress());
            employee.setRole(newEmployee.getRole());
            return repository.save(newEmployee);
        }).orElseGet(() -> {
            newEmployee.setId(id);
            return repository.save(newEmployee);
        });

Dessa forma é realizada o update no banco com os dados passados no body da requisição.

Espero que agregue valor para a comunidade.

Parabéns pelo curso.

Algumas Observações sobre o Projeto.

Olá tudo bem , eu fiz o Bootcamp DIO Pan e fiz o modulo do RDS com HATEOAS , conclui o projeto e gostei muito das aulas porém quero pontuar alguns pontos, a primeira observação foi no LoadDBHateoas.java
No codigo feito em aula nos videos vc colocou a anotação @Autowired quando estava mostrando o loadOrder, na verdade a anotação e @bean por isso não funcionou no video, onde vc acbou juntando os dois num mesmo metodo. Eu fiz dessa forma abaixo e funcionou muito bem.

@Configuration
public class LoadDBHateoas {

    private static final Logger log = LoggerFactory.getLogger(LoadDBHateoas.class);

    @Bean
    CommandLineRunner loadEmployees(EmployeeRepositoryHateoas employeeRepositoryHateoas){
        return args -> {
            log.info("Log of event save user 1: "+ employeeRepositoryHateoas.save(new EmployeeHateoas("Claudio","ADMIN","Rua jupi 215")));
            log.info("Log of event save user 1: "+ employeeRepositoryHateoas.save(new EmployeeHateoas("Clovis","USERS","Avenida Joao Dias, 3000")));
        };
    }

    @Bean
    CommandLineRunner loadOrder(OrderRepositoryHateoas orderRepository){
        return args -> {
            orderRepository.save(new OrderHateoas(Status.COMPLETED, "Completo"));
            orderRepository.save(new OrderHateoas(Status.IN_PROGRESS, "Em Progresso"));
            orderRepository.save(new OrderHateoas(Status.IN_PROGRESS, "Em Progresso"));
            orderRepository.findAll().forEach(order -> {
                log.info("Preloaded" + order);
            });
        };
    }
}

Outro ponto foi nos controllers de Order e Employee

no seu codigo vc cria uma Exception para Employee e Order, porém ao fazer validações via postman com get quando dava que não foi encontrado o postman não exibia nenhuma mensagem personalizada. somente quando se fazia uma alteração via PUT com id invalido, verifiquei que no seu codigo vc não colocou o orElseThrow apontado para a Exception personalizada nos GetMappings vc apenas chamou o status httpStatus.NOT_FOUND , além disso o Optional não seria necessário usando com orElseThrow, evitando o if e reduzindo codigo. Na minha implementação fiz dessa forma.

@GetMapping("/employee/{id}")
    public ResponseEntity<EmployeeHateoas> consultByID(@PathVariable Long id){
        EmployeeHateoas employee = repositoryEmployee.findById(id).orElseThrow(() -> new EmployeeNotFoundExceptionHateoas(id));
            employee.add(linkTo(methodOn(EmployeeControllerHateoas.class).listOfEmployeeAll()).withRel("All employees"));
            return new ResponseEntity<>(employee, HttpStatus.OK);
    }

funciona bem e exibe a mensagem de erro de employee not found. o mesmo feito com order.

@GetMapping("orders/{id}")
   ResponseEntity<OrderHateoas> consultOneOrder(@PathVariable Long id){
       OrderHateoas order = repositoryOrder.findById(id).orElseThrow(()-> new OrderNotFoundExceptionHateoas(id));
       order.add(linkTo(methodOn(OrderControllerHateoas.class).consultOrderAll()).withRel("All orders"));
       return new ResponseEntity<>(order,HttpStatus.OK);
   }

Espero ter contribuido de alguma forma. Abraços.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.