我在 Spring 中使用 Jackson 将我的类序列化为 JSON。当我像下面的示例那样序列化一个类时,Jackson 正在将某些字段的名称从 Camel Case 更改为小写。我知道我可以通过创建自定义(反)序列化器来解决这个问题,但我希望在全局范围内关闭它。也许通过在 application.properties 中设置一个属性。
根据 default Jackson naming strategy ,这是不应该发生的:
In absence of a registered custom strategy, default Java property naming strategy is used, which leaves field names as is...
class Foo {
private final String firstName;
private final String aName;
private final String name;
private final String abName;
Foo(final String firstName, final String aName, final String name, final String abName) {
this.firstName = firstName;
this.aName = aName;
this.name = name;
this.abName = abName;
}
// Getters here
}
public static void main(String[] args) {
final ObjectMapper mapper = new ObjectMapper();
final Foo foo = new Foo("first", "a", "name", "ab");
final String jsonInString = mapper.writeValueAsString(foo);
System.out.println(jsonInString);
}
预期:
{"firstName":"first","name":"name","abName":"ab","aName":"a"
实际:
{"firstName":"first","name":"name","abName":"ab","aname":"a"
编辑:
将问题缩小到对 setter/getter 的解释。开始看起来像 Jackson 中的一个错误。
class Foo {
private final String aName;
Foo(final String aName) {
this.aName = aName;
}
public String getaName() {
return this.aName;
}
}
序列化为 {"aName":"a"}
但是,
class Foo {
private final String aName;
Foo(final String aName) {
this.aName = aName;
}
public String getAName() {
return this.aName;
}
}
序列化为 {"aname":"a"}
最佳答案
这里的问题更多的是关于JavaBeans(TM) Specification .根据规范(第 58 页)
However to support the occasional use of all upper-case names, we check if the first two characters of the name are both upper case and if so leave it alone
“FooBah” becomes “fooBah”
“Z” becomes “z”
“URL” becomes “URL”
并且您有一个带有 aName 字段的边缘案例。因为如果 getter 看起来像 AName() ,那么当您从这个 getter 转换回来时,您应该根据规范查找 AName 字段。这是附加信息 explanation
因此,要解决此问题,您可以在字段/getter 上方使用适当的 getter(getaName()) 或 @JsonProperty("aName") 注释
这里是 similar question
关于java - 阻止 jackson 改变变量名的大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46652019/
我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击
我正在编写一个gem,我必须在其中fork两个启动两个webrick服务器的进程。我想通过基类的类方法启动这个服务器,因为应该只有这两个服务器在运行,而不是多个。在运行时,我想调用这两个服务器上的一些方法来更改变量。我的问题是,我无法通过基类的类方法访问fork的实例变量。此外,我不能在我的基类中使用线程,因为在幕后我正在使用另一个不是线程安全的库。所以我必须将每个服务器派生到它自己的进程。我用类变量试过了,比如@@server。但是当我试图通过基类访问这个变量时,它是nil。我读到在Ruby中不可能在分支之间共享类变量,对吗?那么,还有其他解决办法吗?我考虑过使用单例,但我不确定这是
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我收到格式为的回复#我需要将其转换为哈希值(针对活跃商家)。目前我正在遍历变量并执行此操作:response.instance_variables.eachdo|r|my_hash.merge!(r.to_s.delete("@").intern=>response.instance_eval(r.to_s.delete("@")))end这有效,它将生成{:first="charlie",:last=>"kelly"},但它似乎有点hacky和不稳定。有更好的方法吗?编辑:我刚刚意识到我可以使用instance_variable_get作为该等式的第二部分,但这仍然是主要问题。
我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht