RPCインターフェースが呼び出されたときにHessianがBigDecimalを正しく送信できないという問題の解決策

  自社開発のRPCフレームワーク(ヘシアンプロトコルに基づいてシリアル化)をプロジェクトに使用する場合、RPCインターフェースで定義された送信データにはBigDecimalタイプのデータが含まれます。テストの結果、送信パラメータ158.00が送信されていることがわかりました。 、ただし、得られた値は0.00です。、正しく送信できません。プロジェクトで参照されているヘシアンの依存バージョンは次のとおりです。

		<dependency>
			<groupId>com.caucho</groupId>
			<artifactId>hessian</artifactId>
			<version>4.0.7</version>
		</dependency>

  この現象の理由:ヘッセパッケージの4.0.7バージョンでは、BigDecimalのシリアル化および逆シリアル化の方法が指定されていないため、BigDecimalは送信時にデフォルトのシリアル化方法を使用するため、上記の問題が発生します。

  複数の解決策があります

  1. ヘッセパッケージのバージョンを、4.0.52や4.0.37などの適切なバージョン、またはBigDecimalのシリアル化と逆シリアル化の方法を指定するその他のバージョンにアップグレードします。
  2. 次の2つのファイルを元のパッケージに追加し、ヘッセ行列パッケージに入力します。
  • / META-INF / hessian / serializers、Content如下:
    java.math.BigDecimal = com.caucho.hessian.io.StringValueSerializer
  • / META-INF / hessian / deserializers、Content如下:
    java.math.BigDecimal = com.caucho.hessian.io.BigDecimalDeserializer

  この記事では、最初の方法を使用してhessianを4.0.52にアップグレードします。

  ヘッセパッケージ構造の
ヘッセパッケージの4.0.7バージョン
  4.0.7バージョンは次のとおりです。ヘッセパッケージ構造の4.0.52バージョンは次のとおりです。
ここに画像の説明を挿入
  上の図に示すように、ヘッセパッケージの4.0.52バージョンではシリアライザーとデシリアライザーが導入されています。ファイル。
  デシリアライザーファイルの内容は次のとおりです。

java.io.File=com.caucho.hessian.io.FileDeserializer
java.math.BigDecimal=com.caucho.hessian.io.BigDecimalDeserializer
javax.management.ObjectName=com.caucho.hessian.io.ObjectNameDeserializer

  シリアライザーファイルの内容は次のとおりです。

com.caucho.hessian.io.HessianRemoteObject=com.caucho.hessian.io.RemoteSerializer
com.caucho.burlap.io.BurlapRemoteObject=com.caucho.hessian.io.RemoteSerializer
java.io.File=com.caucho.hessian.io.StringValueSerializer
java.math.BigDecimal=com.caucho.hessian.io.StringValueSerializer
java.util.Locale=com.caucho.hessian.io.LocaleSerializer
javax.management.ObjectName=com.caucho.hessian.io.StringValueSerializer

おすすめ

転載: blog.csdn.net/piaoranyuji/article/details/108342820