小编Vol*_*kyi的帖子

无法读取JSON:无法反序列化START_OBJECT令牌中的hello.Country []实例

我有所有国家的休息网址 - http://api.geonames.org/countryInfoJSON?username=volodiaL.

我使用Spring 3中的RestTemplate将返回的json解析为java对象:

RestTemplate restTemplate = new RestTemplate();
Country[] countries = restTemplate.getForObject("http://api.geonames.org/countryInfoJSON?username=volodiaL",Country[].class);
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,我得到一个例外:

Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of hello.Country[] out of START_OBJECT token
 at [Source: sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@1846149; line: 1, column: 1]
    at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:164)
    at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:691)
    at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:685)
    at com.fasterxml.jackson.databind.deser.std.ObjectArrayDeserializer.handleNonArray(ObjectArrayDeserializer.java:222)
    at com.fasterxml.jackson.databind.deser.std.ObjectArrayDeserializer.deserialize(ObjectArrayDeserializer.java:133)
    at com.fasterxml.jackson.databind.deser.std.ObjectArrayDeserializer.deserialize(ObjectArrayDeserializer.java:18)
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2993)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2158)
    at org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.readJavaType(MappingJackson2HttpMessageConverter.java:225)
    ... 7 more
Run Code Online (Sandbox Code Playgroud)

最后我的国家班:

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)
public class Country {
    private String countryName;
    private long geonameId;

    public String getCountryName() {
        return countryName;
    } …
Run Code Online (Sandbox Code Playgroud)

java spring resttemplate fasterxml

37
推荐指数
2
解决办法
19万
查看次数

如何在localhost:8082查看我的h2数据库中的所有表?

我使用JDBC并从sql脚本创建了名为usaDB的h2数据库.然后我用jdbc填充所有表.

问题是我在localhost:8082连接到usaDB后,我在左边的树上看不到我的表.只有INFORMATION_SCHEMA数据库rootUser,我指定创建usaDB.

如何在h2数据库中查看表的内容?

我试过查询SELECT * FROM INFORMATION_SCHEMA.TABLES.

但它返回了许多表名,除了我创建的那些.我的快照:

在此输入图像描述

java h2

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

如何告诉Eclipse自动显示内容辅助?

当我输入eclipse时,不会自动显示内容辅助,但只有在我按下Ctrl+之后Space.我曾经输入类名,eclipse会自动提出好的建议.
但现在它没有用.

eclipse autocomplete content-assist

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

如何在spring test中的@Test方法之前只填充一次数据库?

使用junit4测试spring服务层的下一个问题是:如何在所有@Test方法之前调用仅填充一次数据库的脚本:我想在所有@Tests之前执行一次:

JdbcTestUtils.executeSqlScript(jdbcTemplate(), new FileSystemResource(
"src/main/resources/sql/mysql/javahelp-insert.sql"), false);
Run Code Online (Sandbox Code Playgroud)

我试图在我的GenericServiceTest类上使用@PostConstruct(由测试类扩展).事实证明,每次@Test方法之前都会调用@PostConstruct.有趣的是,甚至在每个@Test方法之前调用注释了@Autowired of GenericServiceTest的方法.

我不希望在每个测试类之前填充数据库,但只在spring-test启动时填充一次.

如何在使用spring测试框架和junit4的所有@Test方法之前只执行一次上面的方法?

谢谢!

java mysql spring spring-test

21
推荐指数
3
解决办法
2万
查看次数

如何在活跃的spring事务中将数据刷新到db?

我想使用spring测试框架测试hibernate session的save()方法.@Test方法是:

@Test
@Transactional
public void testSave() {
    User expected = createUser();
    getGenericDao().currentSession().save(expected);
    User actual = getUser(generatedId);
    assertUsersEqual(expected,actual);
}
Run Code Online (Sandbox Code Playgroud)

我想将用户刷新到数据库中.我想让我的用户在这个方法之后进入数据库

getGenericDao().currentSession().save(expected);
Run Code Online (Sandbox Code Playgroud)

然后我想使用spring数据框架转到数据库,并通过下一行获取此保存的用户:

User actual = getUser(generatedId);
Run Code Online (Sandbox Code Playgroud)

我尝试使用hibernate flush方法,如:

currentSession().setFlushMode(MANUAL);
//do saving here
currentSession().flush();
Run Code Online (Sandbox Code Playgroud)

它不会将我的用户刷新到数据库中!但是,如果我没有使用@Transactional spring注释并将我的用户保存在编程弹簧事务中,那么我实现了我想要的.不幸的是,由于没有spring @Transactional,因此保存到db的用户不会回滚.因此,我的测试方法会更改后续测试方法的db和行为.

所以我需要将我的用户刷新到db里面的测试方法(不是在最后),并在测试方法结束时回滚所有对db的更改.

UPDATE建议准备方法如下:

@Transactional
public void doSave(User user){
    getGenericDao().currentSession().save(user);
}
Run Code Online (Sandbox Code Playgroud)

并且在testSave中调用doSave什么都不做.执行此方法后,我仍然没有db中的用户.我设置断点并从命令行检查我的数据库.

更新非常感谢您的回复.问题是方法flush()不会将我的用户放入数据库.我尝试了Isolation.READ_UNCOMMITTED并且它没有将我的用户放入数据库.我可以实现我想要的,但前提是我在@Test方法上关闭spring事务并在程序化事务中保存.然后@Test方法不回滚,为后续的@Test方法留下保存的用户.这里保存用户的@Test方法不像删除用户的@Test方法那样危险,因为它没有回滚.因此必须对@Test方法提供Spring事务支持,我无法将我的用户(或删除)放入db.实际上,只有在@Test方法结束并且@Test方法的事务被调用后,才会将用户放入(或删除)到db中.所以我想在@Test方法的中间将我的用户保存到db中,并在@Test方法结束时回滚它

谢谢!

java hibernate spring-test hibernate-session spring-transactions

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

我可以用MySQL Connector/J执行多个以分号分隔的查询吗?

我的mysql db的jdbc驱动程序是版本5.1.25.

我想像这样执行sql查询:

statement.execute("select fullName from user where user_id=1; select fullName from user where user_id=2");
Run Code Online (Sandbox Code Playgroud)

我总是收到异常:

Exception in thread "main" 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 'select fullName from user where user_id=2' at line 1
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.Util.getInstance(Util.java:386)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1054)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4187)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4119)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2570)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2809) …
Run Code Online (Sandbox Code Playgroud)

java mysql jdbc

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

如何使HIbernate获取根实体的所有属性并仅获取关联实体的特定属性?

我有root实体Hostel及其单一关联User owner.

当我获取Hostel实体时,我需要急切地获取User owner,但只有owner3个属性:userId,firstName,lastName.

现在我的标准查询是:

Criteria criteria = currenSession().createCriteria(Hostel.class);

criteria.add(Restrictions.ge("endDate", Calendar.getInstance()));
if (StringUtils.notNullAndEmpty(country)) {
        criteria.add(Restrictions.eq("country", country));
}

Long count = (Long) criteria
            .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
            .setProjection(Projections.rowCount()).uniqueResult();

criteria.setFetchMode("owner", FetchMode.SELECT);
criteria.addOrder(Order.desc("rating"));

// needed to reset previous rowCount projection
criteria.setProjection(null);

// retrieve owner association
criteria.createAlias("owner", "owner", JoinType.LEFT_OUTER_JOIN)
        .setProjection(
                Projections.projectionList()
                        .add(Projections.property("owner.userId"))
                        .add(Projections.property("owner.firstName"))
                        .add(Projections.property("owner.lastName")));

criteria.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
Run Code Online (Sandbox Code Playgroud)

接下来,我这样做criteria.list(),我得到sql语句,它只选择owner投影列表中指定的3个属性.但它不会选择root Hostel实体的任何属性.生成的查询是:

select
    owner1_.user_id as y0_,
    owner1_.firstName as y1_,
    owner1_.lastName as y2_ 
from
    HOSTEL this_ 
left outer …
Run Code Online (Sandbox Code Playgroud)

java hibernate hibernate-criteria

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

org.hibernate.HibernateException:在我的情况下没有活动事务,save无效

我有一个GenericService类封装了子类的crud方法:

public abstract class GenericService<D extends GenericDao<T, I>, T extends DomainObject<I>, I> {

    public I save(T t) {
        return getDao().save(t);
    }
...........................
}
Run Code Online (Sandbox Code Playgroud)

课程AnswerService延伸GenericService.它autowires AnswerDao并声明自己已@Service@Transactional春天的组成部分.

@Service
@Transactional(propagation = Propagation.REQUIRED)
public class AnswerService extends GenericService<AnswerDao, Answer, Long> {

    @Autowired
    private AnswerDao answerDao;

    @Override
    public void setDao(AnswerDao d) {
        this.answerDao = d;
    }

    @Override
    public AnswerDao getDao() {
        return answerDao;
    }
................................
}
Run Code Online (Sandbox Code Playgroud)

AnswerDaoextends GenericDao实现方法save.

public abstract …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate

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

如何在eclipse kepler中查看JavaFX SDK的源代码?

我决定学习JavaFX.我需要浏览类的源代码javafx.scene.layout.StackPane.所以我按F3去了源代码.没有源代码,也没有允许附加源代码的按钮.我在网上看了一下,但没有找到任何有用的东西.我使用eclipse kepler和java7.我的classpath中有jfxrt.jar.

java eclipse javafx

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

如何在按下批准或取消按钮时停止JFileChooser关闭?

我使用JFileChooser的方法showOpenDialog打开文件.

如何将ActionListener附加到"批准"按钮JFileChooser以及如何在单击"批准"按钮并完成侦听器后停止关闭此对话框.

现在我有:

public class MainFileChooser extends JFileChooser {

    private FileFilter plainFilter;

    public MainFileChooser() {

        super.setMultiSelectionEnabled(true);
        super.setAcceptAllFileFilterUsed(false);

        plainFilter = new PlainFilter();
        }

public int showOpenFileDialog() {
        ActionListener actionListener = null;
        // JDialog openFileDialog = super.createDialog(getParent());
        super.addActionListener(actionListener = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                File[] selectedFiles = MainFileChooser.this.getSelectedFiles();
                for (File file : selectedFiles) {
                    if (!file.exists()) {
                        JOptionPane.showMessageDialog(getParent(), file.getName() + " does not exist!",
                                "File is not found", JOptionPane.ERROR_MESSAGE);
                    }
                }
            }
        });
        super.setFileFilter(plainFilter);
        int userOption …
Run Code Online (Sandbox Code Playgroud)

java swing jfilechooser

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