小编Mor*_*sen的帖子

使用Jackson自定义JSON反序列化

我正在使用Flickr API.调用flickr.test.login方法时,默认的JSON结果是:

{
    "user": {
        "id": "21207597@N07",
        "username": {
            "_content": "jamalfanaian"
        }
    },
    "stat": "ok"
}
Run Code Online (Sandbox Code Playgroud)

我想将此响应解析为Java对象:

public class FlickrAccount {
    private String id;
    private String username;
    // ... getter & setter ...
}
Run Code Online (Sandbox Code Playgroud)

应该像这样映射JSON属性:

"user" -> "id" ==> FlickrAccount.id
"user" -> "username" -> "_content" ==> FlickrAccount.username
Run Code Online (Sandbox Code Playgroud)

不幸的是,我无法使用Annotations找到一个漂亮,优雅的方法.到目前为止,我的方法是将JSON字符串读入a Map<String, Object>并从那里获取值.

Map<String, Object> value = new ObjectMapper().readValue(response.getStream(),
        new TypeReference<HashMap<String, Object>>() {
        });
@SuppressWarnings( "unchecked" )
Map<String, Object> user = (Map<String, Object>) value.get("user");
String id = (String) …
Run Code Online (Sandbox Code Playgroud)

java json flickr jackson

29
推荐指数
4
解决办法
6万
查看次数

AngularJS:将对象属性名称传递给指令

我正在编写一个angular.js指令,它是一个对象数组的可重用输入组件.

由于不可能使用原始值ng-repeat(参见:对于数据绑定许多输入的angularjs方法是什么?),我必须将一个对象数组传递给组件:

在控制器中我初始化:

$scope.theSimpsons = [{ value: 'Bart' }, { value: 'Lisa' }];
Run Code Online (Sandbox Code Playgroud)

然后在HTML文件中使用它:

<div ng-app="App">
    <div ng-controller="AppCtrl">
        <multi-input items="theSimpsons" />
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

该指令本身实现如下:

directive('multiInput', function () {
return {
    restrict: 'E',
    scope: {
        items: '=items'
    },
    template:
        '<div>' +
        '<div ng-repeat="item in items">' +
        '<input type="text" ng-model="item.value">' +
        '<a ng-click="items.splice($index, 1)">remove</a>' +
        '</div>' +
        '<a ng-click="items.push({value:\'\'})">add</a>' +
        '</div>'
};
});
Run Code Online (Sandbox Code Playgroud)

这一切都很好.

我的问题:如果对象没有value

该指令value很难对property()的名称进行编码.但是,如果我想拥有这样一个阵列:[{ name: 'Bart' }, { name: 'Lisa' }] …

javascript angularjs angularjs-directive

5
推荐指数
1
解决办法
4948
查看次数

Jackson 如何自动反序列化 java.nio.file.Path?

我不是在抱怨,而是想了解它为什么有效。

这是我的 Java 类:

public static class ExampleClass {
  private Path target;

  public Path getTarget() {
    return target;
  }

  public void setTarget(Path target) {
    this.target = target;
  }
}
Run Code Online (Sandbox Code Playgroud)

这是 JSON:

{
  "target": "some/path"
}
Run Code Online (Sandbox Code Playgroud)

现在一个简单的测试表明它有效:

ObjectMapper mapper = new ObjectMapper();
ExampleClass exampleClass = mapper.readValue(json, ExampleClass.class);
assertEquals(Path.of("some/path"), exampleClass.getTarget());
Run Code Online (Sandbox Code Playgroud)

但是如何?中没有(公共)构造函数Path,它接受String. Jackson 怎么知道它需要调用Path.of()

java json jackson java.nio.file

4
推荐指数
1
解决办法
831
查看次数

将Java 7与官方Google Appengine Maven插件结合使用

我在使用官方Maven插件和Java 7与Google Appengine时遇到了麻烦.

组态

我的项目配置pom.xml非常简单:

在我配置的属性部分中:

<gae.version>1.7.4</gae.version>
Run Code Online (Sandbox Code Playgroud)

后来我使用插件:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>2.3.2</version>
  <configuration>
    <source>1.7</source>
    <target>1.7</target>
  </configuration>
</plugin>
<plugin>
  <groupId>com.google.appengine</groupId>
  <artifactId>appengine-maven-plugin</artifactId>
  <version>${gae.version}</version>
</plugin>
Run Code Online (Sandbox Code Playgroud)

错误信息

每当我运行时,mvn appengine:update我都会收到以下错误:

无法更新应用程序:应用程序包含Java 7类,但尚未设置--use_java7标志.

我试图解决它

当然,我试图解决这个问题.运行

mvn appengine:update --use_java7
Run Code Online (Sandbox Code Playgroud)

要么

mvn appengine:update -D--use_java7
Run Code Online (Sandbox Code Playgroud)

没有帮助,因为该标志不用于Maven插件,而是用于appcfg脚本.

如何将标志传递给脚本,以便我可以使用Java 7(或者我还能做什么)?

java google-app-engine maven-plugin maven java-7

3
推荐指数
1
解决办法
741
查看次数

如何在Joda时间找到差异

我正在尝试使用IntervalJoda Time类,但我无法使用它的构造函数.它不采用这种格式.

我试图DateTime从格式的mysql DB中提取两个,yyyy-MM-dd HH:mm:ss并以String格式检索它.我试图将其转换为日期格式,但间隔类无法采用日期格式.请帮助我应该使用什么???

    String text = "2011-10-02 18:48:05";
    String text2 = "2011-10-02 18:50:05";
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
            Date olddate=sdf.parse(text);
            Date newdate=sdf.parse(text2);
            System.out.println(olddate);
            System.out.println(newdate);
//            Interval interval = new Interval(olddate, newdate);



        } catch (ParseException ex) {
            JOptionPane.showMessageDialog(null, "Error at Timestamp subtract Format function Dategenerator" + ex.getMessage());

        }
Run Code Online (Sandbox Code Playgroud)

java jodatime

2
推荐指数
1
解决办法
3733
查看次数

Java多行正则表达式调试

在Java中,使用以下正则表达式

To: a@b\.com.*Subject: Please verify your email address
Run Code Online (Sandbox Code Playgroud)

不知何故在这段文字中找不到匹配:

Dez 21, 2012 10:29:58 AM com.google.appengine.api.datastore.dev.LocalDatastoreService init
INFO: Local Datastore initialized: 
    Type: High Replication
    Storage: In-memory
Dez 21, 2012 10:29:58 AM com.google.appengine.api.mail.dev.LocalMailService log
INFO: MailService.send
Dez 21, 2012 10:29:58 AM com.google.appengine.api.mail.dev.LocalMailService log
INFO:   From: 
Dez 21, 2012 10:29:58 AM com.google.appengine.api.mail.dev.LocalMailService log
INFO:   To: a@b.com
Dez 21, 2012 10:29:58 AM com.google.appengine.api.mail.dev.LocalMailService log
INFO:   Subject: Please verify your email address
Dez 21, 2012 10:29:58 AM com.google.appengine.api.mail.dev.LocalMailService log
INFO:   Body:
Dez 21, 2012 10:29:58 …
Run Code Online (Sandbox Code Playgroud)

java regex multiline

1
推荐指数
1
解决办法
245
查看次数

使用多个分隔符在Java中拆分字符串

我有一个字符串

String myString = "hello world~~hello~~world"
Run Code Online (Sandbox Code Playgroud)

我正在使用这样的拆分方法

String[] temp = myString.split("~|~~|~~~");
Run Code Online (Sandbox Code Playgroud)

我希望数组temp只包含由〜,~~或~~~分隔的字符串.

但是,这样创建的临时数组长度为5,另外2个"字符串"为空字符串.

我希望它只包含我的非空字符串.请帮忙.谢谢!

java regex string

1
推荐指数
1
解决办法
2070
查看次数

为视网膜和非视网膜显示器创建背景图像

情况

HTML页面背景图像应显示在固定位置,填满整个屏幕或窗口(在非平板电脑,非智能手机设备上).

使用ImageShack创建背景图像.到目前为止没有问题.

我创建了一个Plunk来演示当前的进展.

问题

在非视网膜设备(戴尔笔记本电脑)上,图像似乎呈现正常,填满了整个页面背景.

在我的iPhone(视网膜)上,图像绝对不会显示为高分辨率图像.

我目前的解决方案

此示例中使用的JavaScript代码如下:

function isRetina() {
  return window.devicePixelRatio > 1;
}

$(document).ready(function() {
  var url = "http://farm8.staticflickr.com/7398/11622056325_08e35bd803_o_d.jpg";
  var b = $('body'), w = $(window), width = w.innerWidth(), height = w.innerHeight();
  $('#retina').text('Is ' + (isRetina() ? '' : 'not') + ' retina.');
  $('#size').text(width + " x " + height);
  b.css('background-image'
    , 'url(http://imagizer.imageshack.us/' 
      + width 
      + 'x' 
      + height 
      + 'f0/' 
      + url 
      + ')');
  if (isRetina()) {
    b.css('background-size', (width / 2) …
Run Code Online (Sandbox Code Playgroud)

html javascript css jquery retina

1
推荐指数
1
解决办法
1372
查看次数