小编Sma*_*ajl的帖子

使用JacksonMapper反序列化Java 8 LocalDateTime

我在SO中有关于序列化和反序列化java.time.LocalDateTime以及JSON属性的解答已经阅读了几个问题,但我似乎无法使其正常工作.

我已经设法配置我的Spring Boot应用程序以我希望的格式返回日期(YYY-MM-dd HH:mm)但是我在接受JSON中的这种格式的值时遇到了问题.

这些是我到目前为止所做的所有事情:

添加了maven依赖关系jsr310:

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)

jsr310在我的主要课程中指定:

@EntityScan(basePackageClasses = { App.class, Jsr310JpaConverters.class })
Run Code Online (Sandbox Code Playgroud)

禁用序列化作为时间戳application.properties:

spring.jackson.serialization.write_dates_as_timestamps=false
Run Code Online (Sandbox Code Playgroud)

这是我的日期时间实体映射:

@Column(name = "start_date")
@DateTimeFormat(iso = DateTimeFormat.ISO.TIME)
@JsonFormat(pattern = "YYYY-MM-dd HH:mm")
private LocalDateTime startDate;
Run Code Online (Sandbox Code Playgroud)

在我的数据库中,我将此日期存储为TIMESTAMP,格式如下:2016-12-01T23:00:00+00:00.

如果我通过我的控制器访问此实体,它将返回具有正确startDate格式的JSON.当我尝试发布它并反序列化时,使用YYYY-MM-dd HH:mm格式,我得到以下异常:

{
  "timestamp": "2016-10-30T14:22:25.285+0000",
  "status": 400,
  "error": "Bad Request",
  "exception": "org.springframework.http.converter.HttpMessageNotReadableException",
  "message": "Could not read document: Can not deserialize value of type java.time.LocalDateTime from String \"2017-01-01 20:00\": Text '2017-01-01 20:00' could not …
Run Code Online (Sandbox Code Playgroud)

java json jpa jackson spring-boot

27
推荐指数
5
解决办法
6万
查看次数

JBossESB - 队列到服务映射

我正在拦截通过JBossESB发送的消息.我正在使用管道拦截器这样做.

问题是,尽管发送者是服务(例如PortReference <logical:BlueServiceESB#BlueListener>),但接收者的名称是队列(不是服务).这是合乎逻辑的,因为在某些情况下,多个服务可以从给定队列接收消息,但通常,每个队列仅映射到一个服务.

我想知道哪个队列映射到哪个服务,所以我可以显示/保存这些信息,并显示如消息:service ---> service(not service ---> queue).

我知道我可以使用注册表获取映射到服务的队列名称,如下所示:

System.setProperty("javax.xml.registry.ConnectionFactoryClass", "org.apache.ws.scout.registry.ConnectionFactoryImpl");

// Retrieving information from the ESB Registry
Registry reg = RegistryFactory.getRegistry();
System.out.println(reg.findAllServices());
List<EPR> eprs = reg.findEPRs("FirstServiceESB", "SimpleListener");
System.out.println(eprs);
Run Code Online (Sandbox Code Playgroud)

我想颠倒这种方法 - 队列是输入和服务(EPR =终点引用=服务)是输出.有什么方法可以做到这一点,或者我只是想在这里做不可能的事情.我没有找到关于这个主题的任何教程或问题.

谢谢你的任何提示!

java jboss-esb

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

Spring启动 - 使用Logback发送电子邮件

我正在尝试配置Logback以在发生异常(日志级别:错误)时发送电子邮件.到目前为止我还没能使它工作,所以我想请求你的配置帮助.

我有一个Spring启动应用程序,其中进行了一些处理:

private void foo() {
 try {
  // do something
 } catch (Exception e) {
  log.error("Logging my exception");
 }
}
Run Code Online (Sandbox Code Playgroud)

我想在记录此错误时触发电子邮件.我按照一些教程,将logback.xmlsmtp-appender.xml添加到我的resources目录:

logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    <include resource="smtp-appender.xml" />
    <logger name="com.mycompany" level="DEBUG">
        <appender-ref ref="SMTP" />
    </logger>
</configuration>
Run Code Online (Sandbox Code Playgroud)

SMTP-appender.xml

<?xml version="1.0" encoding="UTF-8"?>

<included>
    <appender name="SMTP" class="ch.qos.logback.classic.net.SMTPAppender">
        <smtpHost>xxx</smtpHost>
        <username>user</username>
        <password>password</password>

        <to>test@email.com</to>
        <from>me@email.com</from>
        <subject>testError</subject>

        <layout class="ch.qos.logback.classic.html.HTMLLayout" />

    </appender>
</included>
Run Code Online (Sandbox Code Playgroud)

我在localhost上设置了本地smtpserver sendmail.我也尝试过使用AWS smtp服务器和Gmail.到目前为止,这些服务对我来说都不起作用.

问题是我在异常后没有收到任何电子邮件,并且字面上没有对应于logback的log.error()输出(当然除了输出)这让我觉得应用程序甚至不知道这些配置文件...

这些是我在pom.xml中的 maven依赖项:

<parent>
    <groupId>org.springframework.boot</groupId> …
Run Code Online (Sandbox Code Playgroud)

java logging spring-boot

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

Spring启动控制器内容协商

我有一个在Spring-boot应用程序中编写的简单REST控制器,但我不确定如何实现内容协商以使其根据请求标头中的Content-Type参数返回JSON或XML.有人可以向我解释一下,我做错了什么?

控制器方法:

@RequestMapping(value = "/message", method = RequestMethod.GET, produces = { MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE })
  public Message getMessageXML(@RequestParam("text") String text) throws Exception {
    Message message = new Message();
    message.setDate(new Date());
    message.setName("Test");
    message.setAge(99);
    message.setMessage(text);

    return message;
  }
Run Code Online (Sandbox Code Playgroud)

调用此方法时,我总是得到JSON(即使我指定了Content-Typeapplication/xml或者text/xml).

当我实现两个方法,每个方法具有不同的映射和不同的内容类型时,我能够从xml获取XML,但如果我在单个方法中指定两个mediaTypes(如提供的示例),则它不起作用.

我想要的是调用\message端点并接收

  • 当GET请求的Content-Type设置为application/xml时的XML
  • 当Content-Type是application/json时的JSON

任何帮助表示赞赏.

编辑:我更新了我的控制器以接受所有媒体类型

@RequestMapping(value = "/message", method = RequestMethod.GET, produces = { MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE }, consumes = MediaType.ALL_VALUE)
  public Message getMessageXML(@RequestParam("text") String text) throws Exception {
    Message message = new Message();
    message.setDate(new Date()); …
Run Code Online (Sandbox Code Playgroud)

java rest spring-boot

16
推荐指数
2
解决办法
6万
查看次数

在Java中使用OpenCV比较两个图像

我试图使用OpenCV库比较两个图像(确定它们是否相似).我配置了java包装器并找到了几个我正在尝试重写为Java的教程(主要是在C/C++中).我正在使用特征检测方法.

问题是我目前拥有的算法没有产生任何合理的结果(它声称两个相似的图像没有任何共同点,并且发现完全不同的其他两个图像之间的匹配).有人建议我应该如何使用openCV匹配器产生一些合理的结果?

这是我的图像比较代码

private static void compareImages(String path1, String path2) {
    System.out.println(path1 + "-" + path2);

    FeatureDetector detector = FeatureDetector.create(FeatureDetector.ORB);
    DescriptorExtractor descriptor = DescriptorExtractor.create(DescriptorExtractor.ORB);

    DescriptorMatcher matcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_HAMMING);

    // first image
    Mat img1 = Imgcodecs.imread(path1, Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE);
    Mat descriptors1 = new Mat();
    MatOfKeyPoint keypoints1 = new MatOfKeyPoint();

    detector.detect(img1, keypoints1);
    descriptor.compute(img1, keypoints1, descriptors1);

    // second image
    Mat img2 = Imgcodecs.imread(path2, Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE);
    Mat descriptors2 = new Mat();
    MatOfKeyPoint keypoints2 = new MatOfKeyPoint();

    detector.detect(img2, keypoints2);
    descriptor.compute(img2, keypoints2, descriptors2);

    // match these two keypoints sets …
Run Code Online (Sandbox Code Playgroud)

java opencv

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

使用Spring引导CrudRepository过滤数据

我有一个简单的REST服务,可以使用Spring启动访问数据CrudRepository.

这个存储库已经实现了这样的分页和排序功能:

public interface FlightRepository extends CrudRepository<Flight, Long> {
  List<Flight> findAll(Pageable pageable);
}
Run Code Online (Sandbox Code Playgroud)

打电话给:

Sort sort = new Sort(direction, ordering);
PageRequest page = new PageRequest(xoffset, xbase, sort);

return flightRepo.findAll(page);
Run Code Online (Sandbox Code Playgroud)

我想添加过滤到这个存储库(例如只返回实体id > 13 AND id < 27).CrudRepository似乎不支持此功能.有没有办法如何实现这一点,还是我需要使用不同的方法?

谢谢你的任何提示!

java rest spring-data spring-data-jpa spring-boot

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

Java OpenCV - 从knnMatch中提取好匹配

我正在尝试实现一个非常简单的程序来查找两个图像之间的相似性.

我正在使用ORB功能检测器和图像描述符执行此任务,我使用knnMatch识别匹配:

FeatureDetector detector = FeatureDetector.create(FeatureDetector.ORB);
DescriptorExtractor descriptor = DescriptorExtractor.create(DescriptorExtractor.ORB);
DescriptorMatcher matcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_HAMMING);

// DETECTION
// first image
Mat img1 = Imgcodecs.imread(path1, Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE);
Mat descriptors1 = new Mat();
MatOfKeyPoint keypoints1 = new MatOfKeyPoint();

detector.detect(img1, keypoints1);
descriptor.compute(img1, keypoints1, descriptors1);

// second image
Mat img2 = Imgcodecs.imread(path2, Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE);
Mat descriptors2 = new Mat();
MatOfKeyPoint keypoints2 = new MatOfKeyPoint();

detector.detect(img2, keypoints2);
descriptor.compute(img2, keypoints2, descriptors2);

// MATCHING
// match these two keypoints sets
List<MatOfDMatch> matches = new ArrayList<MatOfDMatch>();
matcher.knnMatch(descriptors1, descriptors2, matches, …
Run Code Online (Sandbox Code Playgroud)

java opencv

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

Java MySQL检查数据库中是否存在值

我试图检查,如果我的数据库中已存在特定值.我使用JDBC从java独立应用程序访问数据库(查询将记录插入数据库工作,所以我的设置和连接都可以).

String queryCheck = "SELECT * from messages WHERE msgid = " + msgid;
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(queryCheck); // execute the query, and get a java resultset

// if this ID already exists, we quit
if(rs.absolute(1)) {
     conn.close();
     return;
}
Run Code Online (Sandbox Code Playgroud)

我收到此错误(我的SQL语法显然有问题):

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'd-f05708071f8f' at line 1
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试在MySQL命令行中执行此命令,它可以工作!你能告诉我,我的陈述有什么不对吗?谢谢你的任何提示!

java mysql jdbc

11
推荐指数
2
解决办法
8万
查看次数

使用AWS CLI进行Bash - 无法找到凭据

我有一个shell脚本,应该从S3下载一些文件并安装一个ebs驱动器.但是,我总是以"无法找到凭据"结束.

我已使用aws configure命令指定了我的凭据,并且命令在shell脚本之外工作.有人可以告诉我(最好是详细的)如何使它工作?

这是我的剧本

#!/bin/bash

AWS_CONFIG_FILE="~/.aws/config"

echo $1

sudo mkfs -t ext4 $1
sudo mkdir /s3-backup-test
sudo chmod -R ugo+rw /s3-backup-test
sudo mount $1 /s3-backup-test

sudo aws s3 sync s3://backup-test-s3 /s3-backup/test

du -h /s3-backup-test
ipt (short version):
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

bash aws-cli

11
推荐指数
5
解决办法
3万
查看次数

Spring引导JPA - JSON没有嵌套对象与OneToMany关系

我有一个项目,处理对象的一些ORM映射(有一些@OneToMany关系等).

我使用REST接口来处理这些对象,使用Spring JPA来管理它们.

这是我的一个POJO的示例:

@Entity
public class Flight {

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private long id;
  private String name;
  private String dateOfDeparture;
  private double distance;
  private double price;
  private int seats;

  @ManyToOne(fetch = FetchType.EAGER)
  private Destination fromDestination;

  @ManyToOne(fetch = FetchType.EAGER)
  private Destination toDestination;

  @OneToMany(fetch = FetchType.EAGER, mappedBy = "flight")
  private List<Reservation> reservations;
}
Run Code Online (Sandbox Code Playgroud)

在发出请求时,我必须在JSON中指定所有内容:

{
  "id": 0,
  "reservations": [
    {}
  ],
  "name": "string",
  "dateOfDeparture": "string",
  "distance": 0,
  "price": 0,
  "seats": 0,
  "from": {
    "id": 0,
    "name": "string"
  }, …
Run Code Online (Sandbox Code Playgroud)

java orm json hibernate spring-boot

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