2017-12-27 8 views
2

데이터베이스에 간단한 개체를 삽입하려고하지만 컨트롤러에서 LocalDate 매개 변수를 보낼 수 없습니다.LocalDate를 매개 변수로받는 방법

오류는 LocalDate 매개 변수가 발생하는 것으로 알고 있습니다. malformed request syntax, invalid request message framing, or deceptive request routing입니다.

내 컨트롤러

@RequestMapping(value = "/finance",method = RequestMethod.POST) 
    public String postFinance(@ModelAttribute("finance") 
     Finance finance, Model model){ 
     financeServices.targetActivate(finance); 
     model.addAttribute("targetSetStatus",true); 
     return "finance/finance"; 
} 

금융 법인

@Entity 
public class Finance { 


    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    private LocalDate targetDate; 
    private Double targetAmount; 
    private LocalDate createdDate; 

     //getter setters // 

} 

편집 : - 내 양식 보이는, 그래서 내가 양식에서 삽입하려고 같은 : -

<form class="form-horizontal" id="productForm" 
th:action="@{/finance}" method="post"> 

     <div class="form-group"> 
      <div th:if="${targetSetStatus}"> 
       <div class="alert alert-success"> 
          <p>New Target Has Been Set</p> 
       </div> 
      </div> 
     </div> 

     <div class="form-group"> 
       <label class="control-label col-sm-3" 
       for="targetAmount">Target Amount:</label> 
      <div class="col-sm-9"> 
       <input type="number" class="form-control" 
           placeholder="Targeted Amount" 
           name="targetAmount" id="targetAmount"> 
     </div> 
     </div> 
     <div class="form-group"> 
      <label class="control-label col-sm-3" 
      for="targetDate">Target Date:</label> 
      <div class="col-sm-9"> 
      <input type="date" class="form-control" 
           placeholder="Targeted Date" 
           name="targetDate" id="targetDate"> 
     </div> 
     </div> 
     <div class="form-group"> 
      <div class="col-sm-offset-3 col-sm-9"> 
       <button type="submit" class="btn btn-default">Set Target</button> 
     </div> 
    </div> 
</form> 

LocalDate를 java.util.Date으로 대체하면 작동하지만 LocalDate를 Java 8에서 제공하는 API를 사용하려고합니다.

+1

자료 지원 미래에오고, [풀 요청 및 해상도 (https://github.com/spring-projects/spring-boot/pull 참조/9930). 그 동안에 [이 질문을보십시오] (https://stackoverflow.com/questions/44924656/how-to-register-global-databinding-for-localdate-in-spring-mvc). –

답변

0

사용자 정의 JsonDeserializer를 등록해야합니다. 이 코드를 사용

import com.fasterxml.jackson.core.JsonParser; 
import com.fasterxml.jackson.core.JsonProcessingException; 
import com.fasterxml.jackson.databind.DeserializationContext; 
import com.fasterxml.jackson.databind.JsonDeserializer; 
import org.springframework.boot.jackson.JsonComponent; 

import java.io.IOException; 
import java.time.LocalDate; 
import java.time.format.DateTimeFormatter; 

@JsonComponent 
public class CustomJsonDeserializer { 

    /*public static class Serializer extends JsonSerializer<LocalDate> { 

     @Override 
     public void serialize(LocalDate localDate, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException { 

     } 
    }*/ 

    public static class LocalDateDeserializer extends JsonDeserializer<LocalDate> { 

     @Override 
     public LocalDate deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException { 

      String strDate = jsonParser.getValueAsString(); 

      if (strDate == null || strDate.isEmpty()) { 
       return null; 
      } 

      return LocalDate.parse(strDate, DateTimeFormatter.ofPattern("yyyy-MM-dd")); 
     } 
    } 

} 

모습이 링크를 Custom JSON Serializers and Deserializers

+0

나는 spring mvc를 사용하고 있지 않다. spring boot가 아니다. 그래도 여전히 작동합니까? 위의 클래스는 스프링 부트 의존성을 임포트하지만 그것은 작동하지 않습니다. –

+0

이 링크는 도움이됩니다. [link] (http://magicmonster.com/kb/prg/java/spring/webmvc/jackson_custom.html) – Jialzate

관련 문제