小编Sab*_*ine的帖子

ZonedDateTime对SQL数据库的持久性

美好的一天,
我创建了将在全球范围内使用的Web应用程序服务。
因此,我需要将日期时间值存储在UTC中,并以墙上时间的时钟表示给最终用户。
读完堆栈溢出后,我知道应该:

  1. 将时间戳记用作DB中的列类型(当前为MariaDB 10.1.20)
  2. 在Java中使用ZonedDateTime(我使用java8)

在这些值之间转换时出现了问题。
使用JDBC时,必须进行以下转换:

java.sql.Timestamp <-> java.time.ZonedDateTime 
Run Code Online (Sandbox Code Playgroud)

我的代码:

// Get current zonedDateTime
ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneOffset.UTC);

// Convert zonedDateTime to java.sql.Timestamp before saving to DB
Timestamp = Timestamp.from(zonedDateTime.toInstant());

// Get zonedDateTime from resultSet
Timestamp timestamp = (Timestamp) resultSet.getObject("created");
ZonedDateTime zonedDateTime = 
    ZonedDateTime.ofInstant(ts.toInstant(), ZoneOffset.UTC))
Run Code Online (Sandbox Code Playgroud)

当我使用时:

zonedDateTimeBeforeSave.isEqual(zonedDateTimeAfterSave);
Run Code Online (Sandbox Code Playgroud)

它返回false(我需要在我的域模型的重写的equal方法中将它们进行比较)
下面两种打印出来:

zonedDateTimeBeforeSave:2017-01-24T20:18:17.720Z
zonedDateTimeAfterSave:2017-01-24T20:18:17Z

问题:

  1. 我的选择正确吗?也许,我应该使用另一列或Java类型...
  2. 我做转换正确吗?也许还有另一种更好的方法

谢谢

  1. 编辑:在马特·约翰逊(Matt Johnson)的帮助下,我明白了问题所在,事实上,当我将日期时间保存到数据库时,虽然应该保存,但它不保存分数。FYI列的类型为timestamp(6)。
  2. 编辑:现在我使用java.time.Instant而不是ZonedDateTime

java mysql time timezone zoneddatetime

5
推荐指数
1
解决办法
2905
查看次数

Spring MVC验证状态400

我刚刚开始学习Spring并坚持使用表单验证(有dao/service和所有默认设置)

我尝试进行验证任务,以防止在字段中插入超过3个符号

@Size (min = 1, max = 3)
Run Code Online (Sandbox Code Playgroud)

之后我想将表单数据插入到DB并将其输出到我的主页上,当数据满足我的验证并且由1到3个符号组成时,一切正常,但是当这些条件不满足时我尝试插入4或者更多的符号,我收到了HTTP STATUS 400.没有DB插入,也没有视图输出.所以我理解有验证,但我不明白为什么它会告诉我HTTP STATUS 400

@Controller
public class BookController {

    @Autowired
    private BookService bookService;

    @RequestMapping(value = "addBook", method = RequestMethod.GET)
    public String addUser(Model model) {

        model.addAttribute("user", new ValidationField());
        model.addAttribute("book", new Book());

        return "addBook";
    }

    @RequestMapping(value = "addBook", method = RequestMethod.POST)
    public String addBook( @ModelAttribute("user") @Valid ValidationField validationField, Book book, BindingResult result) {
        /*this.user(book, result);*/

        if (result.hasErrors()) {
            return "addBook";
        }
        this.bookService.addBook(book);

        return "redirect:/";
    }
}
Run Code Online (Sandbox Code Playgroud)

验证类

public class …
Run Code Online (Sandbox Code Playgroud)

java spring spring-mvc java-ee spring-validator

2
推荐指数
1
解决办法
3357
查看次数