2016-06-23 1 views
0

私はこの方法でコントローラいる:私ApptRequestがあるRest-forのリクエスト本文の中に、シングル・ストリングのコンストラクタ/ファクトリ・メソッドでオブジェクトを使用する方法?

@RequestMapping(value = "/request", method = RequestMethod.POST) 
public Response<Boolean> requestAppt(
     @RequestBody @Valid ApptRequest request 
) { 
    System.out.println(request); 
    return Response.success(true); 
} 

を:

import org.springframework.format.annotation.DateTimeFormat; 

import java.io.Serializable; 
import java.time.OffsetDateTime; 

public class ApptRequest implements Serializable{ 

    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) 
    private OffsetDateTime date; 

    public ApptRequest() { 
    } 

    public OffsetDateTime getDate() { 
     return date; 
    } 

    public void setDate(OffsetDateTime date) { 
     this.date = date; 
    } 
} 

私がリクエストボディにリクエストを送信しようとしているとき:

{ 
    "date": "2016-05-11T13:30:38+02:00" 
} 

私が持っています例外:

org.springframework.http.converter.HttpMessageNotReadableException: ドキュメントを読み取れませんでした:文字列値 ( '2016-05-11T13:30:38 +02:00 ');シングルStringコンストラクタ/工場 方法ない

何それはOffsetDateTimeが一つだけのStringパラメータとコンストラクタまたはファクトリメソッドを持っているべきであると述べています。

/** 
* Obtains an instance of {@code OffsetDateTime} from a text string 
* such as {@code 2007-12-03T10:15:30+01:00}. 
* <p> 
* The string must represent a valid date-time and is parsed using 
* {@link java.time.format.DateTimeFormatter#ISO_OFFSET_DATE_TIME}. 
* 
* @param text the text to parse such as "2007-12-03T10:15:30+01:00", not null 
* @return the parsed offset date-time, not null 
* @throws DateTimeParseException if the text cannot be parsed 
*/ 
public static OffsetDateTime parse(CharSequence text) { 
    return parse(text, DateTimeFormatter.ISO_OFFSET_DATE_TIME); 
} 

そして、私が代わりにリクエストボディのプロパティの要求のparamとして日付を使用するようにをしようとした場合すべてが正しく動作している:

@RequestMapping(value = "/request", method = RequestMethod.POST) 
public Response<Boolean> requestAppt(
     @RequestParam @Valid @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) OffsetDateTime date 
) { 
    System.out.println(date); 
    return Response.success(true); 
} 
は、しかし、私はそれがされたCharSequenceパラメータで ファクトリメソッドを必要としていることがわかりました

いくつかの注釈などを使って手動で適切なコンストラクタを指定する必要がありますか?

答えて

関連する問題