Campo do tipo Date

Failed to convert property value of type ‘java.lang.String’ to required type ‘java.util.Date’ for property ‘vigenciaDe’; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type java.lang.String to type @javax.persistence.Column @javax.persistence.Temporal java.util.Date for value ‘’; nested exception is java.lang.IllegalArgumentException

Mostre-nos a entity mapeada e mostre-nos o valor que está tentando persistir.

O valor é null, mostra o erro 0400 e no log do eclipse vi este erro, descrito no início do tópico.

Mapeamento:

@Column(name = "tit_vigencia_de")
	@Temporal(TemporalType.TIMESTAMP)
	public Date getVigenciaDe() {
		if (this.vigenciaDe == null) {
			return null;
		}
		return (Date) vigenciaDe.clone();
	}

	public void setVigenciaDe(Date vigenciaDe) {
		if (vigenciaDe == null) {
			this.vigenciaDe = null;
		} else {
			this.vigenciaDe = (Date) vigenciaDe.clone();
		}
	}

Se preencho a data com o valor: 16/03/2017, no debug ele mostra: 2018-04-03T00:00:00.000-0300, mas não dá erro 400.

Mas a data está chegando errado.

Acho que o problema é no mapeamento da data e ou conversão da informação.

E onde você define o valor para esta data?
Por quê do cast aqui this.vigenciaDe = (Date) vigenciaDe.clone();? E por quê do clone()?

Sobre o clone é porque utilizamos uma vacina de código e ele dá erro na vacina.

A data vem de um jsp, código abaixo:

<div class="form-group has-info">
		<label for="vigenciaDe" class="col-xs-12 col-sm-3 control-label no-padding-right">
            <font style="color: red">*</font> Início da vigência:</label>
            <div class="row">
            <div class="col-xs-12 col-sm-5">
            <div class="input-group">
            <span class="input-group-addon"> <i class="fa fa-calendar bigger-110 blue"></i>
            </span>
            <input class="input-medium date-picker" name="vigenciaDe" id="vigenciaDe" type="text" value="${titulo.inicioVigenciaFormatado}" data-date-format="dd/mm/yyyy" placeholder="dd/mm/yyyy" />
            <i class="ace-icon fa fa-info-circle"></i>
            </div>
            </div>
            <div class="help-block col-xs-12 col-sm-reset inline"> Campo obrigatório ! <br>Só aceita dd/mm/yyyy !</div>
            </div>
            </div>

Resolvido
Alterei o mapeamento da data para

@Column(name = "tit_vigencia_de")
	@DateTimeFormat(pattern = "dd/MM/yyyy")
	@Temporal(TemporalType.TIMESTAMP)
	public Date getVigenciaDe() {
		if (this.vigenciaDe == null) {
			return null;
		}
		return (Date) vigenciaDe.clone();
	}

	public void setVigenciaDe(Date vigenciaDe) {
		if (vigenciaDe == null) {
			this.vigenciaDe = null;
		} else {
			this.vigenciaDe = (Date) vigenciaDe.clone();
		}
	}

Ele vem da jsp e cai direto no método setVigenciaDe?

Sim. Primeiro ele vai na classe entity e depois na controller

Após fazer debug