Mongoid-JSON API 응답에서 DateTime 필드를 직렬화 할 때 시간 대신 날짜 가져 오기

맷 어느

모바일 앱에 대해서만 웹 서비스 역할을하는 Rails 앱을 작성 중입니다. --api--skip-active-record스위치를 사용하여 만들었습니다 . 내 모델에는 DateTime 필드가 있습니다.

다음은 내 모델에 대한 코드와 컨트롤러에서 호출 한 메서드입니다. 을 사용하고 있기 때문에 --api보기 코드가 없습니다.

class GroceryItem
  include Mongoid::Document
  field :name, type: String
  field :expiry, type: Date
end

# grocery_items_controller.rb
# GET /grocery_items/1
def show
  render json: @grocery_item
end

데이터베이스에서 해당 필드의 시간 구성 요소가 저장되고 있음을 알 수 있습니다.

db.grocery_items.find()
{ "_id" : ObjectId("58a9298da1c1d12e7cee02d9"), "name" : "Chocolate", "expiry" : ISODate("2017-02-19T05:13:49.253Z") }

Rails 콘솔에서도 볼 수 있습니다.

irb(main):003:0> GroceryItem.first
=> #<GroceryItem _id: 58a9298da1c1d12e7cee02d9, name: "Chocolate", expiry: 2017-02-19 05:13:49 UTC>

그러나 GroceryItem 모델 클래스의 메서드를 사용하여 만료에 액세스하려고하면 Date 개체가 나타납니다. 시간 부분이 아닌 데이터의 날짜 부분 만 얻습니다.

irb(main):004:0> GroceryItem.first.expiry
=> Sun, 19 Feb 2017

irb(main):005:0> GroceryItem.first.expiry.class
=> Date

irb(main):006:0> GroceryItem.first.expiry.to_s
=> "2017-02-19"

인스턴스에서 to_json호출 as_json도 데이터를 생략합니다.

irb(main):008:0> GroceryItem.first.to_json
=> "{\"_id\":{\"$oid\":\"58a9298da1c1d12e7cee02d9\"},\"expiry\":\"2017-02-19\",\"name\":\"Chocolate\"}"

irb(main):009:0> GroceryItem.first.as_json
=> {"_id"=>BSON::ObjectId('58a9298da1c1d12e7cee02d9'), "expiry"=>Sun, 19 Feb 2017, "name"=>"Chocolate"}

내 JSON 응답으로 데이터가 생략됩니다. 컨트롤러의 렌더링 프로세스가 to_json또는 as_json렌더링을 사용한다고 가정합니다 .

{
    "_id": {
        "$oid": "58a9298da1c1d12e7cee02d9"
    },
    "expiry": "2017-02-19",
    "name": "Chocolate"
}

마침내 다음을 호출하여이 데이터에 액세스하는 방법을 알아낼 수있었습니다. 마침내 Time Ruby 클래스를 얻는 방법을 볼 수 있습니다.

irb(main):010:0> GroceryItem.first.attributes[:expiry]
=> 2017-02-19 05:13:49 UTC

irb(main):011:0> GroceryItem.first.attributes[:expiry].class
=> Time

이를 통해 마침내 MongoDB에 저장된 데이터와 일치하도록 ISO8601 사양과 호환되는 방식으로 데이터를 직렬화 할 수 있습니다.

irb(main):012:0> GroceryItem.first.attributes[:expiry].utc.iso8601
=> "2017-02-19T05:13:49Z"

확실히이 동작은 올바르지 않습니다. 개발자가 필드에 대해 DataTime 유형을 선택할 때 시간 구성 요소가 전달되기를 원해야합니다. 그렇지 않으면 대신 날짜 유형을 사용합니다. 이제 내가 적합하다고 생각하는 방식으로 JSON을 렌더링하는 뷰를 생성하여 기본 Rails API 및 Mongoid 페어링 동작을 재정의 할 수 있다는 것을 이해했지만 기본 동작을 자동으로 변경해야한다고 생각하기 때문에 버그 보고서 제출을 고려하고있었습니다. 개발자가 DateTime 필드 유형을 선택할 때 데이터베이스에 저장된 모든 데이터를 렌더링합니다.

버그 보고서 제출을 진행하기 전에 여기에있는 누군가가이 문제에 대한 의견이 있는지 궁금합니다.

지아 울 레만 무갈

코드에 문제가있는 것 같습니다.

class GroceryItem
  include Mongoid::Document
  field :name, type: String
  field :expiry, type: Date
end

여기서 expiry는 Date 유형을 가지 므로 시간 구성 요소없이 Date를 반환 할 것으로 예상됩니다. 적절한 유형을 사용하면 문제가 해결 될 것이라고 생각합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

날짜를 Epoch 초로 변환 할 때 순간 시간대에서 잘못된 값 가져 오기

분류에서Dev

Android : JSON 응답에서 날짜를 변환 할 때 "지정된 개체를 날짜로 형식화 할 수 없습니다"오류가 발생했습니다.

분류에서Dev

Jackson은 JodaTime으로 역 직렬화 할 때 날짜에서 시간 오프셋을 잃습니다.

분류에서Dev

SQL Server 2008 : datetime에서 날짜 / 시간 가져 오기

분류에서Dev

git에 메시지를 커밋 할 현재 날짜와 시간 가져 오기

분류에서Dev

두 개의 DateTime 열에서 최대 날짜 및 시간을 가져 오는 SQL

분류에서Dev

JSON 응답 값을 가져 오려고 할 때 목록 대신 문자열 가져 오기

분류에서Dev

날짜 및 시간에 대한 GMT 시간 가져 오기

분류에서Dev

datetime에서 날짜를 만들 때 시간대를 수정할 수 없습니다.

분류에서Dev

momentjs에서 현지 날짜 시간 json 가져 오기

분류에서Dev

숨겨진 필드를 통해 서버 날짜 및 시간 가져 오기

분류에서Dev

날짜 직렬화에 대한 기본 구성을 재정의 할 때 메타 데이터 페이지의 JSON 예제에서 누락 됨

분류에서Dev

Newtonsoft Json.NET은 직렬화 할 때 기본 datetime 값을 무시합니다.

분류에서Dev

현지 날짜 및 시간대에서 epoch millis 가져 오기

분류에서Dev

서버에서 오류 응답을 역 직렬화 할 때 NPE

분류에서Dev

두 필드에서 최신 날짜를 가져 오는 방법

분류에서Dev

JSON URL에서 Pandas DataFrame으로 날짜 필드 가져 오기

분류에서Dev

필터 쿼리를 위해 Jira의 날짜 및 시간 필드에서 월, 연도 또는 일 가져 오기

분류에서Dev

문자열을 datetime으로 변환 할 때 datetime 대신 NA 가져 오기

분류에서Dev

C #에서 날짜-시간 필드가 직렬화되면 모델이 항상 null입니다.-Restsharp

분류에서Dev

mysqli datetime 필드에 대한 날짜 및 시간 변수 결합

분류에서Dev

REST API의 HTTP 메서드에 대한 요청 및 응답에서 Json 직렬화 또는 역 직렬화를 적용하는 방법

분류에서Dev

PHP를 통해 json 응답 URL에서 데이터를 가져 오려고 할 때 오류 발생

분류에서Dev

AngularJS에서 게시 된 데이터를 역 직렬화 할 때 JSON.Net 오류

분류에서Dev

각도기에서 GetAttribute를 비교할 때 시간 초과 가져 오기

분류에서Dev

입력 날짜를 사용할 수없는 경우 Oracle에서 시작 날짜와 종료 날짜 사이의 입력 날짜를 가져오고 최대 날짜 레코드를 반환하는 방법

분류에서Dev

잭슨 - 시간대와 날짜를 역 직렬화 할 수 없다 '는 파싱되지 않은 텍스트 인덱스 23 발견'오프셋 (offset)

분류에서Dev

때때로 NTPUDPClient에서 날짜와 시간을 가져 오지 못함

분류에서Dev

시간대없이 타임 스탬프에서 날짜 가져 오기

Related 관련 기사

  1. 1

    날짜를 Epoch 초로 변환 할 때 순간 시간대에서 잘못된 값 가져 오기

  2. 2

    Android : JSON 응답에서 날짜를 변환 할 때 "지정된 개체를 날짜로 형식화 할 수 없습니다"오류가 발생했습니다.

  3. 3

    Jackson은 JodaTime으로 역 직렬화 할 때 날짜에서 시간 오프셋을 잃습니다.

  4. 4

    SQL Server 2008 : datetime에서 날짜 / 시간 가져 오기

  5. 5

    git에 메시지를 커밋 할 현재 날짜와 시간 가져 오기

  6. 6

    두 개의 DateTime 열에서 최대 날짜 및 시간을 가져 오는 SQL

  7. 7

    JSON 응답 값을 가져 오려고 할 때 목록 대신 문자열 가져 오기

  8. 8

    날짜 및 시간에 대한 GMT 시간 가져 오기

  9. 9

    datetime에서 날짜를 만들 때 시간대를 수정할 수 없습니다.

  10. 10

    momentjs에서 현지 날짜 시간 json 가져 오기

  11. 11

    숨겨진 필드를 통해 서버 날짜 및 시간 가져 오기

  12. 12

    날짜 직렬화에 대한 기본 구성을 재정의 할 때 메타 데이터 페이지의 JSON 예제에서 누락 됨

  13. 13

    Newtonsoft Json.NET은 직렬화 할 때 기본 datetime 값을 무시합니다.

  14. 14

    현지 날짜 및 시간대에서 epoch millis 가져 오기

  15. 15

    서버에서 오류 응답을 역 직렬화 할 때 NPE

  16. 16

    두 필드에서 최신 날짜를 가져 오는 방법

  17. 17

    JSON URL에서 Pandas DataFrame으로 날짜 필드 가져 오기

  18. 18

    필터 쿼리를 위해 Jira의 날짜 및 시간 필드에서 월, 연도 또는 일 가져 오기

  19. 19

    문자열을 datetime으로 변환 할 때 datetime 대신 NA 가져 오기

  20. 20

    C #에서 날짜-시간 필드가 직렬화되면 모델이 항상 null입니다.-Restsharp

  21. 21

    mysqli datetime 필드에 대한 날짜 및 시간 변수 결합

  22. 22

    REST API의 HTTP 메서드에 대한 요청 및 응답에서 Json 직렬화 또는 역 직렬화를 적용하는 방법

  23. 23

    PHP를 통해 json 응답 URL에서 데이터를 가져 오려고 할 때 오류 발생

  24. 24

    AngularJS에서 게시 된 데이터를 역 직렬화 할 때 JSON.Net 오류

  25. 25

    각도기에서 GetAttribute를 비교할 때 시간 초과 가져 오기

  26. 26

    입력 날짜를 사용할 수없는 경우 Oracle에서 시작 날짜와 종료 날짜 사이의 입력 날짜를 가져오고 최대 날짜 레코드를 반환하는 방법

  27. 27

    잭슨 - 시간대와 날짜를 역 직렬화 할 수 없다 '는 파싱되지 않은 텍스트 인덱스 23 발견'오프셋 (offset)

  28. 28

    때때로 NTPUDPClient에서 날짜와 시간을 가져 오지 못함

  29. 29

    시간대없이 타임 스탬프에서 날짜 가져 오기

뜨겁다태그

보관