2016-12-14 7 views
2

リクエストパラメータで2つの日付を取得する必要があります。"from=jan 1 2016""to= feb 1 2016"とします。 "from"は常に"to"より前に指定してください。 "from""to"前であればJava Webアプリケーションで無効な要求を処理する方法は?

私のコントローラメソッドは対応してMap返しますが、"to=jan 1 2016"値は"from=feb 1 2016"前に来る場合、どのように私は、メッセージを送信するための応答を処理できますか?

+1

投稿はこれまで行ったことがあります。 – FuSsA

+0

dateFrom.compare(dateTo)= -1(<から)/ 0(=から)/ 1(から>)。したがって、compareメソッドを実装する必要があります。 – Zorglube

+0

いくつかのコードを表示できますか?物事を理解する方が良いでしょう。 –

答えて

1

何も起こらないような事態が発生した場合、例外をスローするのが適切な方法です。あなたはJavaの8時間のAPI(またはジョダ時間のようなもの)を使用している場合は、簡単にisBefore()を使用することによって、これを達成することができます:

if (to.isBefore(from)) { 
    // Write your own exception class 
    throw new InvalidParameterException("To cannot be before from"); 
} 

今例外がスローされた場合、あなたがしたい何かをする@ExceptionHandlerを使用することができます。たとえば:あなたはタイプLocalDate@RequestParam Sをマッピングすることができ

@Component 
public class LocalDateStringFormatter implements Formatter<LocalDate> { 
    // Or use a custom formatter with a custom pattern 
    private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ISO_LOCAL_DATE; 

    @Override 
    public LocalDate parse(String isoDateString, Locale locale) throws ParseException { 
     return LocalDate.parse(text, FORMATTER); 
    } 

    @Override 
    public String print(LocalDate date, Locale locale) { 
     retun date.format(FORMATTER); 
    } 
} 

この方法:あなたがリクエストパラメータとして日付を使用したい場合は

@ExceptionHandler(InvalidParameterException.class) 
@ResponseBody 
@ResponseStatus(value = HttpStatus.BAD_REQUEST) 
public ErrorMessageDTO handleInvalidParameter(InvalidParameterException ex) { 
    // Write your own DTO to return an exception 
    return new ErrorMessageDTO(ex.getMessage()); 
} 

、あなたはこれを適切に行うためにFormatter<LocalDate>を使用する場合があります。

関連する問題