我想用C#语言和.NET Framework创建一个声音可视化系统.这可能看起来像在Winamp应用程序中.也许存在免费图书馆或一些描述如何做的有趣文章?示例: alt text http://img44.imageshack.us/img44/9982/examplel.png
我是Java和Jackson的新手以及我尝试使用的许多其他技术,所以我会给出一个详细的答案.
有没有办法阻止一个或多个字段使用Jackson序列化为JSon String_like格式,但没有使用任何类型的JSon注释?
像mapper.getSerializationConfig()之类的东西.某事(忽略("displayname"))如果你知道我的意思.我的对象是一个扩展另一个类的类的实例,并且实现了一个接口,所以这些字段来自类的层次结构.我需要该对象的JSon表示,但只包含某些字段,因此我可以通过POST方法在模拟请求中发送该Json.我正在使用Jackson 2.2.2.提前致谢.
我试图在我的应用引擎应用程序中创建一个地理点,但是当我尝试反序列化它时,我收到了这条烦人的消息:
Uncaught exception from servlet
org.codehaus.jackson.JsonParseException: Unexpected end-of-input: expected close marker for OBJECT (from [Source: java.io.StringReader@1a21658; line: 1, column: 0]).
Run Code Online (Sandbox Code Playgroud)
这是我的 JSON 代码:
{
"id": 31,
"name": "pepe",
"mail": "p@p.com",
"password": 123,
"age":10,
"birthday": "01-06-1991",
"desc" : " bla bla",
"gp": {
"latitude": 64.124596,
"longitude": -147.8632
}
}
Run Code Online (Sandbox Code Playgroud)
这是 geopoint 的声明和我的自定义反序列化方法:
GeoPoint gp;
public GeoPoint getGp() {
return gp;
}
@JsonDeserialize(using = CustomGeoPintDeserializer.class)
public void setGp(GeoPoint gp) {
this.gp = gp;
}
public class CustomGeoPintDeserializer extends JsonDeserializer<GeoPoint> {
@Override
public …Run Code Online (Sandbox Code Playgroud) 我LocalDateTime在Junit测试中遇到反序列化问题。我有简单的REST API返回一些DTO对象。当我打电话给我的端点时,响应没有问题 - 这是正确的。然后我尝试编写单元测试,获取MvcResult并使用ObjectMapper将其转换为我的DTO对象。但我仍然收到:
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.time.LocalDateTime` out of START_ARRAY token
at [Source: (String)"{"name":"Test name","firstDate":[2019,3,11,18,34,43,52217600],"secondDate":[2019,3,11,19,34,43,54219000]}"; line: 1, column: 33] (through reference chain: com.mylocaldatetimeexample.MyDto["firstDate"])
Run Code Online (Sandbox Code Playgroud)
我正在尝试@JsonFormat并添加compile group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jsr310', version: '2.9.8'到我的build.gradle但我使用Spring Boot 2.1.3.RELEASE所以它参与其中。我不知道如何解决它。我的简单端点和单元测试如下:
@RestController
@RequestMapping("/api/myexample")
public class MyController {
@GetMapping("{id}")
public ResponseEntity<MyDto> findById(@PathVariable Long id) {
MyDto myDto = new MyDto("Test name", LocalDateTime.now(), LocalDateTime.now().plusHours(1));
return ResponseEntity.ok(myDto); …Run Code Online (Sandbox Code Playgroud) Jackson串行化java.time.Instant与WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS默认启用。
它JSON是这样产生的
{ "timestamp":1421261297.356000000 }
Run Code Online (Sandbox Code Playgroud)
我想知道是否有办法摆脱最后的零。我想要这样的东西:
{ "timestamp":1421261297.356 }
Run Code Online (Sandbox Code Playgroud)
我试过:
mapper.configure( SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS, false );
mapper.configure( SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, true );
Run Code Online (Sandbox Code Playgroud)
但是此配置将其更改为毫秒表示1421261297356。我想要秒部分和小数毫秒部分。
多年来,我一直在使用 Jackson 来序列化/反序列化对象,并且总是发现使用TypeReference<T>反序列化List等不必要地复杂。我创建了一个简单的辅助函数:
public static <T> TypeReference<List<T>> list() {
return new TypeReference<List<T>>(){}
}
Run Code Online (Sandbox Code Playgroud)
预期用途:
List<Foo> foos = objectMapper.readValue(json, list());
Run Code Online (Sandbox Code Playgroud)
它有效!的种类。通过调试器进行检查时,不是 的列表Foo,而是 的列表LinkedHashMap。我知道ObjectMapper反序列化为LinkedHashMap类型Object,我在这里阅读了解释:
但是,为什么它能够分配List<LinkedHasMap>给 a List<Foo>?至少不应该是某种ClassCastException吗?
另外,有没有办法用Java的类型系统来做到这一点?
注意:以下方法声明具有相同的问题,这是有道理的,因为不需要T确定附加参数:
public static <T> TypeReference<List<T>> listOf(Class<T> ignored) {
return new TypeReference<List<T>>(){}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试修改一些使用Google API的java代码.我无法获得的功能之一是dateRestrict.有关这方面的信息可以在这里找到: GoogleAPI
为了实现这一点,我在查询后附加以下字符串.它与完整URL正确连接,因为其他参数可以使用它.
String parameters = "&dateRestrict=2012-01-01";
我也尝试过1d和1m,但这些都不能作为参数
如果有人能告诉我dateRestrict的一个例子,我会非常感激.我只是不明白他们在API中使用它的意思.谢谢.
有时我的API抛出异常,该服务器无法处理我的请求.我决定创建一个AOP方面,它将重新调用API调用.例如,5次,之后抛出异常,如果它仍然不起作用.
请看我的AOP课程.这不是一个完整的机构,但我希望你能够理解发生了什么:
@Aspect
public class RetryRequestExecutor {
....
@Around("@annotation(com.test.RequestRetriable)")
public Object retryApiRequest(ProceedingJoinPoint point) throws Throwable {
int numAttempts = 0;
ServiceException lastException;
do {
numAttempts++;
try {
preInvokeLog(point);
Object retValue = point.proceed();
postInvokeLog(point);
return retValue;
} catch (ServiceException e) {
lastException = handleServiceException(point, numAttempts, e);
}
} while (numAttempts <= maxRetries);
throw lastException;
}
....
}
Run Code Online (Sandbox Code Playgroud)
这是我的服务类:
public class UserApiImpl implements UserApi {
...
@Override
public List<DomainUser> retrieveSuspendedUsers() throws Exception{
LOG.debug("Retrieving suspended users.");
...
List<DomainUser> users = new ArrayList<DomainUser>(64);
do …Run Code Online (Sandbox Code Playgroud) 我们使用Jersey/Jackson将JSON数据解组为java DTO.我的一个DTO是一个抽象类,我想将JSON数据解组到他的扩展DTO之一.例如,假设我有这些DTO:
public abstract class AnimalDTO{}
public class DogDTO extends AnimalDTO{}
public class CatDTO extends AnimalDTO{}
Run Code Online (Sandbox Code Playgroud)
我想解组这个JSON数据:
{Zoo: {Animals:[{"type"="DogDTO", "code"="001", "name"="chihuahua"}, {"type"="CatDTO", "code"="002", "name"="felix"}]}}
Run Code Online (Sandbox Code Playgroud)
因为"类型"会给出我想要解组的DTO类型.但似乎没有考虑这个属性.有没有我错过的,或误解了JSON语法?
谢谢.
我将所有静态数据存储在JSON文件中。该JSON文件最多有行1000。如何获取所需的数据而不将所有行存储为ArrayList?
我的代码,我现在正在使用,我想提高它的效率。
List<Colors> colorsList = new ObjectMapper().readValue(resource.getFile(), new TypeReference<Colors>() {});
for(int i=0; i<colorsList.size(); i++){
if(colorsList.get(i).getColor.equals("Blue")){
return colorsList.get(i).getCode();
}
}
Run Code Online (Sandbox Code Playgroud)
是否可以?我的目标是在不使用ArrayList. 有没有办法让代码变成这样?
Colors colors = new ObjectMapper().readValue(..."Blue"...);
return colors.getCode();
Run Code Online (Sandbox Code Playgroud)
资源.json
[
...
{
"color":"Blue",
"code":["012","0324","15478","7412"]
},
{
"color":"Red",
"code":["145","001","1","7879","123984","89"]
},
{
"color":"White",
"code":["7","11","89","404"]
}
...
]
Run Code Online (Sandbox Code Playgroud)
颜色.java
class Colors {
private String color;
private List<String> code;
public Colors() {
}
public String getColor() {
return color;
}
public void setColor(String color) …Run Code Online (Sandbox Code Playgroud)