2016-04-19 8 views
4

私は私のサービスAPIのためのSpring Frameworkを使用して日時の解析のためのorg.joda.time.DateTimeよ。具体的には、私は、ユーザーの柔軟性がちょうど日付、または要件で日付と時刻の両方を、使用することを可能にする、ISOFormatter.dateOptionalTimeParser()を使用しています。春@RequestParam DateTime書式

私はすでに人々に伝えることができ、これらすべての関連の質問は、例えば、方に私を指すしようとしている見てきた、私を信じてthisthisは、

以前、私はStringとして日付を取っていたなどと、サービス層では、上記のジョダフォーマッタを使用して、それを処理して、今私は、ifということを意味コントローラで要求の検証を追加します要求が構文的に間違っている場合、要求はサービス層にも送られるべきではありません。

私は、@DateTimeFormat(iso = ISO.DATE_TIME)の複数のバリエーションを使用して、pattern文字列を何もフォーマットされていないものとして指定しようとしました。

@RequestMapping(value = URIConstants.TEST_URL, method = RequestMethod.GET) 
public @ResponseBody String getData(@RequestParam(required = false) DateTime from, 
            @RequestParam(required = false) DateTime to) { 
    return dataService.fetchDataFromDB(from, to); 
} 

私は、ユーザーから取得した日付がISO 8601 dateOptionalTimeフォーマットに準拠していることを確認するにはどうすればよいですか?多分これを実装するために複数のパターンを適用できますか?

答えて

2

また、コンバータを作成することができますし、それはそれの世話をします。下の例ではOffsetDateTimeを使用していますが、LocalDateTimeで簡単に置き換えることができます。詳細な記事については、次のURLを参照してください - http://www.baeldung.com/spring-mvc-custom-data-binder

がでも私はいつかのためにこれで苦しんでいたし、それが働いていませんでした。そのトリックは、@Component注釈を使用して、私のためにしました。

import java.time.OffsetDateTime; 
import java.time.format.DateTimeFormatter; 

import org.springframework.core.convert.converter.Converter; 
import org.springframework.stereotype.Component; 

@Component 
public class OffsetDateTimeConverter implements Converter<String, OffsetDateTime> { 

    @Override 
    public OffsetDateTime convert(final String source) { 

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

     return OffsetDateTime.parse(source, DateTimeFormatter.ISO_OFFSET_DATE_TIME); 
    } 
} 
2

私はISODateTimeFormat.dateOptionalTimeParser()を使用してStringからの時間を解析し、このためのPOJO、作成終わった:それを

@RequestMapping(value = URIConstants.TEST_URL, method = RequestMethod.GET) 
public @ResponseBody String getData(@RequestParam(required = false) DateOptionalTime from, 
            @RequestParam(required = false) DateOptionalTime to) { 
    return dataService.fetchDataFromDB(from, to); 
} 

public class DateOptionalTime { 

    private DateTime date; 

    private DateTimeFormatter formatter = ISODateTimeFormat.dateOptionalTimeParser(); 

    public DateOptionalTime() { 
    } 

    public DateOptionalTime(String date) { 
     if (date != null) { 
      this.setDate(formatter.parseDateTime(date)); 
     } 
    } 

    public DateTime getDate() { 
     return date; 
    } 

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

    public LocalDateTime getLocalDateTime() { 
     return date.toLocalDateTime(); 
    } 


} 

をコントローラで、私はこのようにそれを使用ISO規格に従って日付書式を検証し、書式が正しくない場合はBAD_REQUESTステータスを返します。