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パラメータで送るので、上のコードを使わないとダメ

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