0
By clicking to search it gives the following error below, but when I take the formatting of the mask in Webconfig works normally. Someone can help?
Failed to Convert value of type [java.lang.String] to required type [br.com.npisistemas.planos.model.Plano]; nested Exception is is java.lang.Illegalstateexception: Cannot Convert value of type [java.lang.String] to required type [br.com.npisistemas.planos.model.Plano]: no matching Editors or Conversion Strategy found.
Model:
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotBlank(message = "Descrição é obrigatória")
private String descricao;
@NotNull(message = "Valor adesão é obrigatória")
@Column(name = "valor_adesao")
private BigDecimal valorAdesao;
@NotNull(message = "Valor parcela é obrigatória")
@Column(name = "valor_parcela")
private BigDecimal valorParcela;
@NotNull(message = "Periodicidade é obrigatória")
@Enumerated(EnumType.STRING)
private Periodicidade periodicidade;
@Column(name = "possui_seguro")
private Boolean possuiSeguro;
@NotNull(message = "Tipo pessoa é obrigatória")
@Enumerated(EnumType.STRING)
@Column(name = "tipo_pessoa")
private TipoPessoa tipoPessoa;
private Boolean status;
private String observacao;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public BigDecimal getValorAdesao() {
return valorAdesao;
}
public void setValorAdesao(BigDecimal valorAdesao) {
this.valorAdesao = valorAdesao;
}
public BigDecimal getValorParcela() {
return valorParcela;
}
public void setValorParcela(BigDecimal valorParcela) {
this.valorParcela = valorParcela;
}
public Periodicidade getPeriodicidade() {
return periodicidade;
}
public void setPeriodicidade(Periodicidade periodicidade) {
this.periodicidade = periodicidade;
}
public Boolean getPossuiSeguro() {
return possuiSeguro;
}
public void setPossuiSeguro(Boolean possuiSeguro) {
this.possuiSeguro = possuiSeguro;
}
public TipoPessoa getTipoPessoa() {
return tipoPessoa;
}
public void setTipoPessoa(TipoPessoa tipoPessoa) {
this.tipoPessoa = tipoPessoa;
}
public Boolean getStatus() {
return status;
}
public void setStatus(Boolean status) {
this.status = status;
}
public String getObservacao() {
return observacao;
}
public void setObservacao(String observacao) {
this.observacao = observacao;
}
public boolean isNovo() {
return this.id == null;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Plano other = (Plano) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
}
Webconfig:
private ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
@Bean
public ViewResolver viewResolver() {
ThymeleafViewResolver resolver = new ThymeleafViewResolver();
resolver.setTemplateEngine(templateEngine());
resolver.setCharacterEncoding("UTF-8");
return resolver;
}
@Bean
public TemplateEngine templateEngine() {
SpringTemplateEngine engine = new SpringTemplateEngine();
engine.setEnableSpringELCompiler(true);
engine.setTemplateResolver(templateResolver());
engine.addDialect(new LayoutDialect());
engine.addDialect(new ErpDialect());
engine.addDialect(new DataAttributeDialect());
return engine;
}
private ITemplateResolver templateResolver() {
SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
resolver.setApplicationContext(applicationContext);
resolver.setPrefix("classpath:/templates/");
resolver.setSuffix(".html");
resolver.setTemplateMode(TemplateMode.HTML);
return resolver;
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
}
@Bean
public FormattingConversionService mvcConversionService() {
DefaultFormattingConversionService conversionService = new DefaultFormattingConversionService();
NumberStyleFormatter bigDecimalFormatter = new NumberStyleFormatter("#,##0.000");
conversionService.addFormatterForFieldType(BigDecimal.class, bigDecimalFormatter);
return conversionService;
}
@Bean
public LocaleResolver localeResolver() {
return new FixedLocaleResolver(new Locale("pt", "BR"));
}
}
Controller:
@Autowired
private CadastroPlanoService cadastroPlanoService;
@Autowired
private Planos planos;
// Mapeamento da URL - GET.
@RequestMapping("/novo")
public ModelAndView novo(Plano plano) {
ModelAndView mv = new ModelAndView("plano/CadastroPlano");
mv.addObject("periodicidades", Periodicidade.values());
mv.addObject("tipoPessoas", TipoPessoa.values());
return mv;
}
// Mapeamento da URL - POST.
@RequestMapping(value = { "/novo", "{\\d+}" }, method = RequestMethod.POST)
public ModelAndView salvar(@Valid Plano plano, BindingResult result, Model model,
RedirectAttributes attributes) {
if (result.hasErrors()) {
return novo(plano);
}
cadastroPlanoService.salvar(plano);
attributes.addFlashAttribute("mensagem", "Plano salvo com sucesso!");
return new ModelAndView("redirect:/planos/novo");
}
// Metodo GET - Pesquisa.
@GetMapping
public ModelAndView pesquisar(PlanoFilter planoFilter, BindingResult result,
@PageableDefault(size = 10) Pageable pageable, HttpServletRequest httpServletRequest) {
ModelAndView mv = new ModelAndView("plano/PesquisaPlano");
mv.addObject("tipoPessoas", TipoPessoa.values());
PageWrapper<Plano> paginaWhapper = new PageWrapper<>(planos.filtrar(planoFilter, pageable),
httpServletRequest);
mv.addObject("pagina", paginaWhapper);
return mv;
}
// Metodo DELETE - Deletar
@DeleteMapping("/{id}")
public @ResponseBody ResponseEntity<?> excluir(@RequestBody @PathVariable("id") Plano plano) {
try {
cadastroPlanoService.excluir(plano);
} catch (ImpossivelExcluirEntidadeException e) {
return ResponseEntity.badRequest().body(e.getMessage());
}
return ResponseEntity.ok().build();
}
// Metodo GET - Alterar
@GetMapping("/{id}")
public ModelAndView editar(@PathVariable("id") Plano plano) {
ModelAndView mv = novo(plano);
mv.addObject(plano);
return mv;
}
}