2016-12-14 62 views
2

我必須得到請求參數中的兩個日期,比如說"from=jan 1 2016""to= feb 1 2016""from"應始終在"to"之前。在Java Web應用程序中處理無效請求的方法?

我的控制器方法返回Map響應如果"from""to"前,但如果"to=jan 1 2016"價值來自"from=feb 1 2016"之前,我該如何處理髮送消息的反應如何?

+1

發佈你到目前爲止做了什麼.. – FuSsA

+0

dateFrom.compare(dateTo)= -1(from to)。所以你必須實現比較方法。 – 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做你想做的任何事情,如果有異常拋出。例如:

@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>正確地做到這一點:

@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); 
    } 
} 

這樣,您就可以映射@RequestParam小號LocalDate類型。

相關問題