私は自分のオブジェクトをインスタンス化できるようにSpringのAbstractHttpMessageConverterを使用しています。 readINternalでSpring HTTPMessageConverterでHTTPリクエストパラメータを取得
コンバータ
public class PaypalIPNHttpMessageConverter extends AbstractHttpMessageConverter<IPNMessage> {
public PaypalIPNHttpMessageConverter() {
super(MediaType.APPLICATION_FORM_URLENCODED, MediaType.TEXT_PLAIN);
}
@Override
protected boolean supports(Class<?> clazz) {
return clazz == IPNMessage.class;
}
@Override
protected IPNMessage readInternal(Class<? extends IPNMessage> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {
//Converts HTTPRequest into map<string,string> that IPNMessage can then parse
String requestString = IOUtils.toString(inputMessage.getBody(), "UTF-8");
Map<String, String[]> requestMap = new LinkedHashMap<>();
for (String keyValue : requestString.split("&")) { //each key value is delimited by &
String[] pairs = keyValue.split("=", 2); // = pairs a key to a value
requestMap.put(pairs[0], pairs[1].split(",")); // , splits multiple values for that key
}
return new IPNMessage(requestMap);
}
@Override
protected void writeInternal(IPNMessage ipnMessage, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
}
}
()、Iだけは、HTTPRequestの入力ストリームを生成getBody()機能を有するHttpInputMessageオブジェクトを通過しています。
私は独自のコードを解析してParameterMapを構築しようとしましたが、urlencodingが異なる場合は必ずしも機能しません。
は、とにかく、私は、コンバータからSpringのWebRequestクラスまたはのHttpServletRequestオブジェクトを取得し、そこに素晴らしいgetParameterMap()関数を使用することができますありますか?
TL; DR
はMessageConverterに代わりのHttpInput WebRequestクラスまたはてHTTPServletRequestを使用するためにとにかくがありますので、私が代わりに車輪の再発明の、素晴らしいgetParameterMap()関数を使用することができますか?
おかげ
を使用しています。 Springフレームワークは、メッセージコンバータのurlパラメータにアクセスするつもりはないことに注意してください。あなたの機能をプラグインする場所があるかもしれません(変換サービス?引数リゾルバ?) –