Pojo를 XML로 변환하려면 Rest API 호출을 사용하고 있습니다. 다음은 Java 9 javax.money.MonetaryAmount (JSR 354) : Pojo를 XML로 또는 그 반대로 변환 할 수 없습니다.
내 코드입니다 :TestAccount.java
import javax.money.MonetaryAmount;
public class TestAccount {
private MonetaryAmount paymentAmount;
private String accountNumber;
public String getAccountNumber() {
return this.accountNumber;
}
public void setAccountNumber(String accountNumber) {
this.accountNumber = accountNumber;
}
public MonetaryAmount getPaymentAmount() {
return this.paymentAmount;
}
public void setPaymentAmount(MonetaryAmount paymentAmount) {
this.paymentAmount = paymentAmount;
}
}
Controller.java
public class Controller extends BaseController {
@RequestMapping(value = "/javaTest", method = RequestMethod.GET, produces = { "application/xml" })
public TestAccount testMoneyPackage() {
TestAccount obj = new TestAccount();
obj.setAccountNumber("101423");
obj.setPaymentAmount(MoneyUtilityCls.of(10.898));
return obj;
}
}
브라우저에 URL을 실행
http://localhost:8080/api/javaTest
출력 :
<OverdueAccount>
<accountNumber>101423</accountNumber>
<paymentAmount>
<currency>
<context>
<providerName>java.util.Currency</providerName>
<empty>false</empty>
</context>
<defaultFractionDigits>2</defaultFractionDigits>
<currencyCode>USD</currencyCode>
<numericCode>840</numericCode>
</currency>
<number>10.9</number>*****loss of precision*******
<negative>false</negative>
<zero>false</zero>
<precision>3</precision>
<scale>1</scale>
<positiveOrZero>true</positiveOrZero>
<positive>true</positive>
<negativeOrZero>false</negativeOrZero>
<factory>
<defaultMonetaryContext>
<precision>0</precision>
<amountType>org.javamoney.moneta.RoundedMoney</amountType>
<fixedScale>false</fixedScale>
<maxScale>-1</maxScale>
<providerName/>
<empty>false</empty>
</defaultMonetaryContext>
<amountType>org.javamoney.moneta.RoundedMoney</amountType>
<maxNumber/>
<minNumber/>
<maximalMonetaryContext>
<precision>0</precision>
<amountType>org.javamoney.moneta.RoundedMoney</amountType>
<fixedScale>false</fixedScale>
<maxScale>-1</maxScale>
<providerName/>
<empty>false</empty>
</maximalMonetaryContext>
</factory>
<context>
<precision>0</precision>
<amountType>org.javamoney.moneta.RoundedMoney</amountType>
<fixedScale>false</fixedScale>
<maxScale>-1</maxScale>
<providerName/>
<empty>false</empty>
</context>
</paymentAmount>
</OverdueAccount>
od.setPaymentAmount (MoneyUtil.of (10.898))를 설정하면 당신이 볼 수 있듯이,
내가 그 여분의 XML 태그가 무엇인지
또한<number>10.9</number>
으로 XML 정밀도의 손실을 얻고있다?
이 문제는 MonetaryAmount 필드에서만 발생하며 그렇지 않으면 코드가 제대로 실행 중입니다. 그래서 MonetaryAmount 필드를 Pojo로 XML로 변환하는 정확한 방법은 정확하지 않고 그 반대의 경우도 마찬가지입니다.
"이 경우의 솔루션은 유틸리티에서 다른 클래스 (예 : Money)를 반환하거나 반환 된 RoundedMoney 객체의 소수 자릿수를 변경하는 것입니다." 그것은 효과가 있었다. 고맙습니다. – AftabLib