【问题标题】:Method to handle invalid request in a Java Web Application?在 Java Web 应用程序中处理无效请求的方法?
【发布时间】:2016-12-14 14:55:22
【问题描述】:

我必须在请求参数中获取两个日期,比如说"from=jan 1 2016""to= feb 1 2016""from" 应始终位于 "to" 之前。

如果"from""to" 之前,我的控制器方法返回Map 作为响应,但如果"to=jan 1 2016" 值在"from=feb 1 2016" 之前,我该如何处理发送消息的响应?

【问题讨论】:

  • 发布到目前为止你做了什么..
  • dateFrom.compare(dateTo) = -1(从 到)。所以你必须实现 compare 方法。
  • 你能显示一些代码吗?理解事物对我们来说会更好。

标签: java date web spring-boot calendar


【解决方案1】:

如果发生任何不应该发生的事情,正确的方法是抛出异常。如果您使用的是 Java 8 time API(或类似 Joda time),您可以使用 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);
    }
}

这样你就可以映射LocalDate类型的@RequestParams。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-20
    • 1970-01-01
    • 2017-10-19
    • 2012-02-27
    • 2012-08-20
    • 1970-01-01
    相关资源
    最近更新 更多