Ini adalah apa yang saya pikirkan tentang lakukan di server GlassEE JEE menggunakan Jersey.
@GET
@Path("/{name}/{date}")
public String getMessages(@PathParam("name") String name, @PathParam("date") Date date)
Saya suka ide untuk bisa memberi tahu orang yang menggunakan layanan web RESTful ini bahwa "Tanggal di sini adalah apa pun yang bekerja dengan kelas Date di Java". Itu cukup sederhana dari sudut pandang bahwa mereka hanya dapat melihat spec Date, dan mereka sudah memiliki model kerja yang dapat mereka uji.
Masalah yang saya khawatirkan adalah ketika saya melakukan ini, JAX-RS tidak begitu baik ketika Date () tidak suka apa yang didapat di konstruktor. Sejak Date () melempar kesalahan jika tidak dapat menguraikan apa yang diberikan (seperti jika Anda memberikannya string "hari ini" alih-alih tanggal nyata), server JEE mengembalikan kesalahan 404.
Apakah ini praktik yang baik? Apakah ada cara yang lebih baik untuk melakukan ini yang tidak saya pikirkan?
sumber
DateTimeFormatter
. Untuk Java <= 7, saya akan menggunakanThreadLocal
Siapa yang akan menggunakan layanan Anda? Apakah mereka akan repot-repot mencari spesifikasi
Date
kelas dan mencari tahu apa jenis string yang akan diuraikan? Saya tidak akan, bahkan jika menjadi programmer Java saya akan tahu di mana mencarinya ;-)Saya pikir Anda harus terlebih dahulu memberi tahu pengguna Anda seperti apa URI Anda nantinya, misalnya
dan kemudian mencari cara agar Jersey membantu Anda dalam menguraikan format tanggal apa pun yang Anda pilih. Itu bisa berarti menggunakan
Date
tipe parameter dan mungkin menentukan ekspresi reguler di@Path
anotasi Anda , misalnyaatau menggunakan beberapa kelas lain yang mampu menguraikan tanggal dalam format Anda. Bagaimana menangani URI yang tidak cocok dengan spesifikasi yang Anda berikan kepada pengguna Anda adalah hal lain yang harus Anda putuskan bagaimana menangani secara independen dari salah satu di atas (mengembalikan sumber daya default? Mengembalikan kesalahan 404?).
sumber