pabloxavier / fakebank

Estudos e treinamento de Spring e Serviços
0 stars 0 forks source link

Adição de método de montagem de status code 201 - Created no Endpoint Abstrato #46

Closed pabloxavier closed 6 years ago

pabloxavier commented 6 years ago

Com esta implemementação no FakebankEndpoint, será possível informar o location do Header, com o ID do Resource que fora POSTADO.

    public<T> ResponseEntity<T> created(T body, Object... ids) {
        String pathIds = "";
        for (Object id : ids) {
            pathIds += "/" + id.toString();
        }

        Object path = RequestContextHolder
            .getRequestAttributes()
            .getAttribute(
                    HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE,
                    RequestAttributes.SCOPE_REQUEST);

        URI location = URI.create(path.toString() + pathIds);

        return ResponseEntity.created(location).body(body);
    }

No método específico de Endpoint em que desejar, num @PostMapping, será possível:

    @PostMapping
    public ResponseEntity<?> incluirAgencia(@RequestBody @Valid AgenciaInclusaoCommand comando) 
    {
        Agencia agenciaIncluida = service.salvar(comando);
        AgenciaRepresentation model = AgenciaRepresentation.from(agenciaIncluida);

        //O método created acionada abaixo está na classe 'Mãe' FakebankEndpoint
        //Será informado o body que é a própria agência recém incluída
        //E também o ID da agência recém incluída
        return created(model, agenciaIncluida.getCodigo());
    }

Repare abaixo, o atributo location do Header: image