rog*_*hat 9 java rest json get bigdecimal
我有一个Get API返回一个JSON. 预期的格式是:
{
"value1": "123.00",
"value2": "23.00"
}
Run Code Online (Sandbox Code Playgroud)
这些值位于BigDecimal对象中:
public class Result{
BigDecimal value1;
BigDecimal value2;
// getters and setters
}
Run Code Online (Sandbox Code Playgroud)
现在,当发出请求时,我创建Result对象并将这些值填充为BigDecimal,创建一个列表并返回。我收到的回复是:
{
"value1": 123.00,
"value2": 23.00
}
Run Code Online (Sandbox Code Playgroud)
这些值是正确的,但不是字符串。我怎样才能把它们做成绳子?
我知道我们可以转换BigDecimal为,String但我只有 BigDecimal 字段的对象,并且无法向其填充 String 值。
最后,列表是这样制作的:
List<MyObj> obj = Arrays.stream(myObj).collect(Collectors.toList());
Result result = new Result();
obj.forEach(t -> t.mergeToResult(result)); // mergeToResults does all the population like result.setValue1(new BigDecimal(123.00))
return result;
Run Code Online (Sandbox Code Playgroud)
您可以使用@JsonFormat注释,如下所示:
import com.fasterxml.jackson.annotation.JsonFormat;
public class Result {
@JsonFormat(shape = JsonFormat.Shape.STRING)
private BigDecimal value;
// getters and setters
}
Run Code Online (Sandbox Code Playgroud)
String根据我对维基百科页面的阅读,按照 JavaScript 的传统行为, JSON 中的类型Number可能被视为浮点数。浮点技术为了执行速度而故意牺牲精度。
该类BigDecimal的目的恰恰相反,为了准确性而牺牲执行速度。
因此,如果您希望最大程度地保值BigDecimal,请存储为String. 希望这种方法可以减少 JSON 的使用者无意中将传入值解析为浮点的情况。向那些使用 JSON 的人清楚地记录您将数据解析为浮点数BigDecimal或等效数据而不是浮点数的意图。
Java 导出:
\n\nString output = myBigDecimal.toString() ;\nRun Code Online (Sandbox Code Playgroud)\n\nJSON:
\n\n{\n "value1": "123.00",\n "value2": "23.00"\n}\nRun Code Online (Sandbox Code Playgroud)\n\nJava 导入:
\n\nBigDecimal bd = new BigDecimal( "123.00" ) ;\nRun Code Online (Sandbox Code Playgroud)\n\nBigDecimal::toString研究和的文档new BigDecimal( string )。您还应该了解该BigDecimal::toPlainString方法。
至于你的Java流,我不明白你的问题。您对List和 数组的使用是无法解释的。
基本上,您应该toJson在您的类上实现一个方法Result。Result::toJson在流代码中调用该方法。
这是此类的一个示例。
\n\npackage com.basilbourque.example;\n\nimport java.math.BigDecimal;\n\npublic class Result {\n\n BigDecimal start, stop;\n\n public String toJson () {\n StringBuilder sb = new StringBuilder( "{\\n" );\n sb.append( " " ); // Indent with four spaces.\n sb.append( this.enquote( "start:" ) + " " );\n sb.append( this.enquote( start.toString() ) );\n sb.append( " , \\n" );\n sb.append( " " ); // Indent with four spaces.\n sb.append( this.enquote( "stop:" ) + " " );\n sb.append( this.enquote( stop.toString() ) );\n sb.append( "\\n}\\n" );\n return sb.toString();\n }\n\n static public Result fromJson ( String json ) {\n \xe2\x80\xa6\n }\n\n private String enquote ( String string ) {\n return "\\"" + string + "\\"";\n }\n\n // Constructor\n public Result ( BigDecimal start , BigDecimal stop ) {\n this.start = start;\n this.stop = stop;\n }\n\n public static void main ( String[] args ) {\n Result r = new Result( new BigDecimal( "123.00" ) , new BigDecimal( "23.00" ) );\n System.out.println( r.toJson() );\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n运行时。
\n\n{\n "start:" "123.00" , \n "stop:" "23.00"\n}\nRun Code Online (Sandbox Code Playgroud)\n\n提示:您可能需要考虑使用 JSON\xe2\x86\x94Java 映射框架来帮助您完成这项工作。
\n| 归档时间: |
|
| 查看次数: |
35562 次 |
| 最近记录: |