için HTTP istek parametrelerini al Benim nesneyi oluşturmama izin vermek için Spring'in AbstractHttpMessageConverter uygulamasını kullanıyorum.Spring HTTPMessageConverter
Dönüştürücü readINternal olarak
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 {
}
}
(), öyle geçirilen tek HTTPRequest bir InputStream üreten getBody() işlevi olan bir HttpInputMessage nesnesi.
ParametreMap'ı ayrıştırmak ve oluşturmak için kendi kodumu yazmayı denedim, ancak işlenmemiş kodlamanın farklı olması durumunda her zaman çalışmaz.
ben dönüştürücüden Spring'in WebRequest veya HttpServletRequest nesneyi almak ve orada harika getParameterMap() işlevini kullanabilirsiniz yine de var mı?
TL;
DR ben harika getParameterMap yerine tekerleği yeniden keşfetmek() işlevini kullanabilirsiniz böylece yerine HttpInput ait MessageConverter içinde WebRequest veya HttpServletRequest kullanmak yine de var mı?
Teşekkür
Genellikle sadece autowire HttpServletRequest yönetilen fasulye bahara (örneğin sadece bir alan olarak bu ekleyin: '@Autowired HttpServletRequest istek;') olabilir kullanır. Spring framework'ün mesaj dönüştürücülerindeki URL parametrelerine erişme niyetinde olmadığını unutmayın. İşlevsellikinizi daha iyi hale getirmek için daha iyi yerler olabilir (dönüşüm hizmeti? Argüman çözümleyicileri?) –