2016-06-10 4 views
1

В настоящее время моя система имеет базовый интерфейс, который содержит 4 метода для картографа.Selma Mapper Generics Convert BaseMapper <T extends BaseDomain, D extends BaseDTO>

После сборки появляется сообщение об ошибке, кто-то дал мне знать, что это такое? Я пробовал много способов, должен иметь эти четыре общих метода для преобразования в определенные моменты crudservice.

Error:java: Failed to generate mapping method for type br.com.cron.pdv.domain.Imposto to br.com.cron.pdv.service.service.ImpostoService not supported on br.com.cron.pdv.service.mapper.BaseServiceMapper.asDTO(T) ! --> Add a custom mapper or 'withIgnoreFields' on @Mapper or @Maps to fix this ! If you think this a Bug in Selma please report issue here [ https://github.com/xebia-france/selma/issues] .

Ниже BaseMapper:

public interface BaseServiceMapper<T extends BaseDomain, D extends BaseDTO> { 

    //Server X Domain 
    T asDomain(D source); 

    List<T> asDomains(List<D> source); 

    D asDTO(T source); 

    List<D> asDTOs(List<T> source); 

} 

интерфейс расширяет:

@Mapper(withIgnoreMissing = IgnoreMissing.ALL, withIoC = IoC.SPRING) 
public interface ImpostoMapper extends BaseServiceMapper<Imposto, ImpostoDTO> { 

} 

Моя_служба:

public interface ImpostoService extends BaseService<Imposto, Long> { 
} 

Моя_служба:

public interface BaseService<T, ID extends Serializable> { 

    public T salvar(T t); 

    public List<T> salvar(List<T> t); 

    public List<T> listarTodos(); 

    public T buscarPor(ID id); 

    List<T> buscarPorDataAtualizacao(LocalDateTime dataInicial, LocalDateTime dataFinal); 

    public List<T> listarAtivos(); 

    public void remover(ID id); 

    public void remover(T t); 

    public void remover(Iterable<T> iterable); 

    public void desativar(T t); 

    public void ativar(T t); 
} 

Мой CrudBaseService:

public abstract class CrudController<T extends BaseDomain, D extends BaseDTO, ID extends Serializable> { 


     protected BaseResponse response; 
     private BaseService<T, ID> service; 
     private BaseServiceMapper<T, D> mapper; 


     public CrudController(BaseService<T, ID> service, BaseServiceMapper<T, D> mapper) { 
      this.service = service; 
      this.mapper = mapper; 
     } 

     public abstract ResponseEntity<List<T>> listarTodos(); 

     public abstract ResponseEntity<List<T>> listarAtivos(); 

     public abstract ResponseEntity<T> buscar(@PathVariable(ID) Long id); 

     public abstract ResponseEntity<Void> cadastrar(@ModelAttribute T t, UriComponentsBuilder uriComponentsBuilder); 

     public abstract ResponseEntity<T> atualizar(@PathVariable(ID) Long id, @ModelAttribute T t); 

     public abstract RedirectView remover(@PathVariable(ID) Long id); 

     @RequestMapping(value = REQUEST_MAPPING_INTEGRACAO_DATA, method = RequestMethod.GET) 
     public ResponseEntity<BaseResponse> buscarPorDataAtualizacao(@RequestParam(name = DATA_INICIAL, required = false) String dataInicial, 
                    @RequestParam(name = DATA_FINAL, required = false) String dataFinal) { 

      response = new BaseResponse(); 

      if (isNullOrEmpty(dataInicial) || isNullOrEmpty(dataFinal)) { 
       response.adicionarErro("Existe data(s) vazia(s) ou no formato incorreto"); 
       return createResponse(response); 
      } 

      LocalDateTime dtInicial; 
      LocalDateTime dtFinal; 

      try { 
       dtInicial = parseLocaleDateTimeWithoutHour(dataInicial); 
       dtFinal = parseLocaleDateTimeWithoutHour(dataFinal); 
      } catch (Exception ex) { 
       response.adicionarErro(ex.getMessage()); 
       return createResponse(response); 
      } 

      List<T> result = service.buscarPorDataAtualizacao(dtInicial, dtFinal); 

      List<D> resultDTO = null;//mapper.asDTOs(result); 
      response.setResult(resultDTO); 

      if (resultDTO.isEmpty()) { 
       return createResponse(response, HttpStatus.NOT_FOUND); 
      } 

      return createResponse(response); 
     } 

     ResponseEntity<BaseResponse> createResponse(BaseResponse result) { 
      return new ResponseEntity<>(result, result.getSucesso() ? HttpStatus.OK : HttpStatus.BAD_REQUEST); 
     } 

     ResponseEntity<BaseResponse> createResponse(BaseResponse result, HttpStatus status) { 
      return new ResponseEntity<>(result, status); 
     } 
    } 

My Controller Rest:

@RestController 
@RequestMapping(ImpostoController.REQUEST_MAPPING_IMPOSTO) 
public class ImpostoController extends CrudController<Imposto, ImpostoDTO, Long> { 

      public static final String REQUEST_MAPPING_IMPOSTO = "imposto"; 

      private ImpostoService impostoService; 
      private ImpostoMapper mapper; 

      @Autowired 
      public ImpostoController(ImpostoService service, ImpostoMapper mapper) { 
       super(service, mapper); 
       this.impostoService = service; 
       this.mapper = mapper; 
      } 

      @RequestMapping(method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) 
      public ResponseEntity<List<Imposto>> listarTodos() { 
       List<Imposto> impostoList = impostoService.listarTodos(); 
       if (impostoList.isEmpty()) { 
        return new ResponseEntity<>(HttpStatus.NO_CONTENT); 
       } 
       return new ResponseEntity<>(impostoList, HttpStatus.OK); 
      } 

      @Override 
      @RequestMapping(value = REQUEST_MAPPING_ATIVOS, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) 
      public ResponseEntity<List<Imposto>> listarAtivos() { 
       List<Imposto> impostoList = impostoService.listarAtivos(); 
       if (impostoList.isEmpty()) { 
        return new ResponseEntity<>(HttpStatus.NO_CONTENT); 
       } 
       return new ResponseEntity<>(impostoList, HttpStatus.OK); 
      } 

      @Override 
      @RequestMapping(value = REQUEST_MAPPING_ID, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) 
      public ResponseEntity<Imposto> buscar(@PathVariable(ID) Long id) { 
       Imposto imposto = impostoService.buscarPor(id); 
       if (imposto == null) { 
        return new ResponseEntity<>(HttpStatus.NOT_FOUND); 
       } 
       return new ResponseEntity<>(imposto, HttpStatus.OK); 
      } 

      @Override 
      @RequestMapping(value = REQUEST_MAPPING_CADASTRAR, method = RequestMethod.POST) 
      public ResponseEntity<Void> cadastrar(@RequestBody Imposto imposto, UriComponentsBuilder uriComponentsBuilder) { 
       impostoService.salvar(imposto); 
       HttpHeaders httpHeaders = new HttpHeaders(); 
       httpHeaders.setLocation(uriComponentsBuilder.path(REQUEST_MAPPING_ID).buildAndExpand(imposto.getId()).toUri()); 
       return new ResponseEntity<>(httpHeaders, HttpStatus.CREATED); 
      } 

      @Override 
      @RequestMapping(value = REQUEST_MAPPING_ATUALIZAR, method = RequestMethod.PUT) 
      public ResponseEntity<Imposto> atualizar(@PathVariable(ID) Long id, @Validated @RequestBody Imposto imposto) { 
       Imposto impostoEmBanco = impostoService.buscarPor(id); 

       if (impostoEmBanco == null) { 
        return new ResponseEntity<>(HttpStatus.NOT_FOUND); 
       } 

       if (imposto.isSituacao()) impostoEmBanco.ativar(); 
       else impostoEmBanco.desativar(); 

       try { 
        impostoService.salvar(impostoEmBanco); 
       } catch (Exception e) { 
        return new ResponseEntity<>(HttpStatus.EXPECTATION_FAILED); 
       } 
       return new ResponseEntity<>(impostoEmBanco, HttpStatus.OK); 
      } 

      @Override 
      @RequestMapping(value = REQUEST_MAPPING_REMOVER, method = RequestMethod.DELETE) 
      public RedirectView remover(@PathVariable(ID) Long id) { 
       Imposto imposto = impostoService.buscarPor(id); 
       impostoService.remover(imposto); 
       return new RedirectView(REQUEST_MAPPING_IMPOSTO); 
      } 

     } 

ответ

0

Я только что видел ваш вопрос. Выпуск Selma 0.15 должен решить эту проблему. Теперь методы из BaseServiceMapper считываются с точки зрения ImpostoMapper.

Смежные вопросы