如何反序列化包含不区分大小写的枚举值的JSON字符串?(使用Jackson Databind)
JSON字符串:
[{"url": "foo", "type": "json"}]
Run Code Online (Sandbox Code Playgroud)
和我的Java POJO:
public static class Endpoint {
public enum DataType {
JSON, HTML
}
public String url;
public DataType type;
public Endpoint() {
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,反序列化JSON "type":"json"
将失败,因为它"type":"JSON"
可以工作.但我想"json"
以命名惯例为理由.
序列化POJO也会导致大写 "type":"JSON"
我想过使用@JsonCreator
和@JsonGetter:
@JsonCreator
private Endpoint(@JsonProperty("name") String url, @JsonProperty("type") String type) {
this.url = url;
this.type = DataType.valueOf(type.toUpperCase());
}
//....
@JsonGetter
private String getType() {
return type.name().toLowerCase();
}
Run Code Online (Sandbox Code Playgroud)
它奏效了.但我想知道是否有更好的解决方案,因为这看起来像是对我的黑客攻击.
我也可以编写一个自定义反序列化器,但是我有很多不同的POJO使用枚举,而且很难维护.
任何人都可以建议一个更好的方法来使用适当的命名约定序列化和反序列化枚举?
我不希望我在java中的枚举是小写的!
这是我使用的一些测试代码:
String data = "[{\"url\":\"foo\", \"type\":\"json\"}]";
Endpoint[] …
Run Code Online (Sandbox Code Playgroud) 我知道如何创建一个空数组,但是如何String
从一开始就使用值创建一个数组呢?
嗨专家,我有这个控制器代码,抛出上述错误.它工作正常,直到昨天,我不知道同事对此代码做了什么,今天我看到错误:
BindingResult和bean名称'sideForm'的普通目标对象都不可用作请求属性
你能告诉我在哪里寻找这种错误吗?我在POST或GET方法声明中犯了什么错误或者返回错误了吗?
非常感谢您的帮助:)
package com.att.analytics.ui;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.si.myworld.business.AdminChart;
import com.si.myworld.business.Chart;
import com.si.myworld.dao.AdminChartSummaryData;
import com.si.myworld.dao.BulletinData;
import com.si.myworld.dao.ChartData;
@RequestMapping("/index.html")
@Controller
public class IndexController {
private static final Logger log = Logger.getLogger(IndexController.class);
/**
* Called to load the page initially (GET request)
*
* @param model
* @return
*/
@RequestMapping(method = RequestMethod.GET)
public String getCharts(ModelMap model) {
Chart chart = new Chart();
chart.setTimeline("Monthly"); …
Run Code Online (Sandbox Code Playgroud) 我有一个自定义的异常类注释返回给定HttpStatus
:
@ResponseStatus(value=HttpStatus.BAD_REQUEST, reason="Invalid parameter")
public class BadRequestException extends RuntimeException
{
public BadRequestException(String msg)
{
super(msg);
}
}
Run Code Online (Sandbox Code Playgroud)
当我BadRequestException
从我的控制器中抛出一个但是原因总是"无效的参数"当然有效.有没有办法在这个类中设置返回的原因?我想传递一个字符串作为原因.
谢谢!
我一直在寻找解决方案,但找不到解决方案,最近我将 VSCode 中的资源管理器从左侧切换到右侧,效果更好,我现在遇到的问题是,当我打开终端时,我会看到一个调试控制台左边 - 见下图。
有没有办法可以禁用/隐藏终端的调试控制台部分?当我启动新控制台时,它总是最大化,并且无法将其设置为最小化。
我很难在jquery Select2中覆盖默认消息的最小长度输入.
默认情况下,插件提供以下消息.
Please enter 1 more characters
Run Code Online (Sandbox Code Playgroud)
我的要求是显示以下文字
Enter 1 Character
Run Code Online (Sandbox Code Playgroud)
请分享解决方案.谢谢.
我有几个字符串,每个字符串包含一个对象数组的JSON表示.这是代码中的一个例子来说明,虽然这不是我的实际代码(传入JSON字符串):
String s1 = "[{name: "Bob", car: "Ford"},{name: "Mary", car: "Fiat"}]";
String s2 = "[{name: "Mack", car: "VW"},{name: "Steve", car: "Mercedes Benz"}]";
Run Code Online (Sandbox Code Playgroud)
我需要将这两个JSON数组合并为一个大型JSON数组.我可以将其视为一个字符串操作问题,并用逗号替换内端方括号,但这不是特别健壮(尽管我保证获得有效的JSON).
我宁愿将这两个字符串视为JSON数组,只是以某种方式将它们组合在一起.这是一个很棒的计划,除了我不知道"某种程度"的部分.
有没有人知道Java中的解决方案不需要构建JSON对象的Java Object表示?
谢谢!
我有一个Hotspot JVM堆转储,我试图找出一个对象是否在权属空间,伊甸园空间或幸存者空间中存在,但我不能.
感谢有人可以帮助我.
这是一个愚蠢的问题,但花了最后20分钟左右浏览谷歌结果和Netbeans的菜单.在编辑下有一个开始和停止宏录制,但保存宏后,我似乎无法找到如何运行它.
没有为它指定键盘快捷键,假设我可以选择从菜单中的某个位置运行命名宏,但除了开始/停止录制之外我找不到任何能够列出宏的内容,以便我可以运行它.