将日期(日,月,年)的输入转换/映射到java.time.LocalDate

时间:2015-01-27 09:08:56

标签: javascript angularjs jpa jersey

这就是我们在界面中的内容:

enter image description here

我粘贴了我认为相关的代码部分,但可能需要更多内容。

如何运作

按下按钮时,将调用userController.js save方法。在控制器中有$资源,$ save方法是"连接"使用UserController.java中的create方法,并且持久存在。

问题

在界面中我有三个输入(dd,mm,yy),我想要保留的是具有java.time.LocalDate的用户。 我应该如何以及在何处对这三个输入进行映射/转换以便在LocalDate中进行转换?因为很明显,用户在.js中定义的方式和方式在.java中定义的是型动物。

在前端

user.html

<div class="form-group">
                <label class="col-sm-2 control-label">Date of Birth</label>
                <div class="col-sm-10">
                    <div class="form-inline">
                        <div class="form-group">
                            <label class="sr-only" for="txt_day">Enter Day</label>
                            <div class="col-sm-2">
                                <input type="text" id="txt_day" ng-model="user.birthdate.day" class="form-control" placeholder="DD" required maxlength="2"
                                    data-validation-required-message="Day is required">
                            </div>
                        </div>
                        <div class="form-group">
                            <label class="sr-only" for="txt_month">Enter Month</label>
                            <div class="col-sm-2">
                                <input type="text" id="txt_month" ng-model="user.birthdate.month" class="form-control" placeholder="MM" required
                                    maxlength="2" data-validation-required-message="Month is required">
                            </div>
                        </div>
                        <div class="form-group">
                            <label class="sr-only" for="txt_year">Enter Year</label>
                            <div class="col-sm-2 ">
                                <input type="text" id="txt_year" ng-model="user.birthdate.year" class="form-control" placeholder="YY" required
                                    maxlength="4" data-validation-required-message="Year is required">
                            </div>
                        </div>
                    </div>
                </div>
            </div>

userController.js

$scope.user = new UserService();

    $scope.save = function() {
        $scope.user.$save(function() {
            $location.path('/');
        });
    };

UserService.js

return $resource('rest/user/:action', {},....

在后端

UserController.java

@POST
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public User create(User user) {
        LOGGER.info("create(): " + user);

        return this.userDao.save(user);;
    }

实体

@Column(nullable = false)
    @Convert(converter = LocalDatePersistenceConverter.class)
    private LocalDate birthDate;

1 个答案:

答案 0 :(得分:0)

老实说,我发现您的应用程序通过休息服务将您的域实体暴露给外部。我不建议这样做,以确保分离关注原则。你现在遇到的这个问题就是因为这个原因。如果在您的应用程序中添加services / dto图层有点黄瓜,则可以采用以下方法:

@Entity
public class User{
    @Column(nullable = false)
    @Convert(converter = LocalDatePersistenceConverter.class)
    private LocalDate birthDate;

    @Transient
    private birthDay
    @Transient
    private birthMonth
    @Transient
    private birth birthYear
    ..
    @PrePersist
    protected void prePersist()
    {
        birthDate = new LocalDate(birthDay, birthMonth, birthYear)
    }
}

因此,您的实体将从您的javascript组件填充,而jpa提供程序会进行调整,从而创建一个jodatime对象。 希望这有效