SpringRestClientでキャメルケースの変数名保ったままJSON受け取る
AndroidAnnotationsと一緒にSpringRestClient使っていて、
スネークケースで返ってくるJSONに対して、キャメルケースで受けなければならないが自動でやってくれない。
変数名をスネークケースに合わせるのはやりたくなかったのでハマっていた。
結構AndroidAnnotationsのwiki見てたけど、
よく考えると調べるべきはSpringRestClientの仕様だった。
class Hoge { @JsonProperty("user_id") private String userId; public String getUserId() { return this.userId; } public void setUserId(String userId) { this.userId = userId; } }
これで変換してくれるようになる。
padrinoでjsonパラメータはparamsに入らない
ほとんどsinatraと同じなので
post "/api" do request.body.rewind # 既に読まれているときのため data = JSON.parse request.body.read "Hello #{data['name']}!" end
が適用できる
https://github.com/letmein/padrino-json
使うと良いかも
ちなみにAndroidAnnotationsでREST APIを使って普通にpostすると
jsonパラメータで送るので、上のコードを使わないとダメ
padrinoのdatamapper使ってる時にテスト環境のmigrateする
padrino rake -e test dm:auto:migrate
ずっと落ちるのでappname_test.db見たら空になっていてmigrateされてないことに気付いた
eで環境名を指定するが、rakeの後に打たないとダメ。一番後ろだと無視されるので注意
mochaをcoffeescriptでやるやつ
mocha --compilers coffee:coffee-script hoge.coffee
apkのインストールは完了してません的なエラー
提供元不明なアプリを通す設定にしてても
ダウンロード介してapkインストールするのは署名つけないとダメだった
AndroidAnnotationsのRestClientでJSONをパースするとエラーが出る
@Restをつけたinterface部分に
RestTemplate getRestTemplate();
を加えた後
Clientを使っている場所で
@RestService HogeRepository hogeRepository; // 省略 RestTemplate restTemplate = hogeRepository.getRestTemplate(); ArrayList<HttpMessageConverter<?>> httpMessageConverters = new ArrayList<HttpMessageConverter<?>>(); httpMessageConverters.add(new MappingJacksonHttpMessageConverter()); httpMessageConverters.add(new StringHttpMessageConverter()); restTemplate.setMessageConverters(httpMessageConverters);
これを追加しないと動かない。
更にmavenを使わずjarを直接入れてる場合
Could not find class 'org.codehaus.jackson.map.ObjectMapper'
というエラーが出るので
http://wiki.fasterxml.com/JacksonDownload
からDLして入れると動く。1.9.1を入れたら動いた。
javascriptでget_orを簡単に書く
get_orみたいなのを綺麗にかけることに気づいた
var get = function(v){ var or_when_f = function(or_v){ return or_v; }; var or_when_t = function(or_v){ return v; }; if (v == undefined || v == null) { return { or : or_when_f }; } else { return { or : or_when_t }; } }; get("foo").or("bar"); // foo get(null).or("bar"); // bar