我正在填充“用户详细信息”页面,此时,我以空用户身份登录,并且它一直在破坏,因为此查询必须返回一些内容。 我想这样做,如果它是空的,它将返回"&#34 ;;而不是打破。
我有一个模糊的想法如何做到这一点,但我需要帮助!当用户登录时查询肯定有效,因为我已经测试了代码,并且当有有效用户时它会填充。
我认为应该是这样的:
@Override
public UserDetails fetchUserById(int userId) {
String query = "select ID, LOGIN_ID, EMAIL_ID, FIRST_NAME, MIDDLE_NAME, LAST_NAME, decode(is_primary, 1, 'true', 'false') IS_PRIMARY, decode(status, 1, 'true', 'false') IS_ACTIVE from user_details where ID = ?";
List<UserDetails> strLst = return jdbcTemplate.queryForObject(query, new RowMapper<UserDetails>() {
@Override
public UserDetails mapRow(ResultSet rs, int rowNum) throws SQLException {
UserDetails userDetails = new UserDetails ();
userDetails .setId(rs.getInt("ID"));
userDetails .setIntranetId(rs.getString("LOGIN_ID"));
userDetails .setEmailId(rs.getString("EMAIL_ID"));
userDetails .setFirstName(rs.getString("FIRST_NAME"));
userDetails .setMiddleName(rs.getString("MIDDLE_NAME"));
userDetails .setLastName(rs.getString("LAST_NAME"));
userDetails.setPrimaryAnalyst(Boolean.valueOf(rs.getString("IS_PRIMARY")));
userDetails.setStatus(Boolean.valueOf(rs.getString("IS_ACTIVE")));
return userDetails;
}
}, userId);
if (strLst.isEmpty()) {
return " ";
} else {
return strLst.get(0);
}
}
这是我的查询代码:
@Override
public UserDetails fetchUserById(int userId) {
String query = "select ID, LOGIN_ID, EMAIL_ID, FIRST_NAME, MIDDLE_NAME, LAST_NAME, decode(is_primary, 1, 'true', 'false') IS_PRIMARY, decode(status, 1, 'true', 'false') IS_ACTIVE from user_details where ID = ?";
RowMapper<UserDetails> rowMapper = new RowMapper<UserDetails>(){
@Override
public UserDetails mapRow(ResultSet rs, int rowNum) throws SQLException {
UserDetails userDetails = new UserDetails ();
userDetails .setId(rs.getInt("ID"));
userDetails .setIntranetId(rs.getString("LOGIN_ID"));
userDetails .setEmailId(rs.getString("EMAIL_ID"));
userDetails .setFirstName(rs.getString("FIRST_NAME"));
userDetails .setMiddleName(rs.getString("MIDDLE_NAME"));
userDetails .setLastName(rs.getString("LAST_NAME"));
userDetails.setPrimaryAnalyst(Boolean.valueOf(rs.getString("IS_PRIMARY")));
userDetails.setStatus(Boolean.valueOf(rs.getString("IS_ACTIVE")));
return userDetails;
};
return jdbcTemplate.queryForObject(query, rowMapper, userId);
}
null用户读取的错误 HTTP状态500 - 请求处理失败;嵌套异常是org.springframework.dao.EmptyResultDataAccessException:结果大小不正确:预期1,实际0
答案 0 :(得分:0)
您只需使用EmptyResultDataAccessException
并返回空字段即可。像这样:
@Override
public UserDetails fetchUserById(int userId) {
String query = "select ID, LOGIN_ID, EMAIL_ID, FIRST_NAME, MIDDLE_NAME, LAST_NAME, "
+ " decode(is_primary, 1, 'true', 'false') IS_PRIMARY, "
+ " decode(status, 1, 'true', 'false') IS_ACTIVE "
+ " from user_details where ID = ?";
try{
RowMapper<UserDetails> rowMapper = new RowMapper<UserDetails>(){
@Override
public UserDetails mapRow(ResultSet rs, int rowNum) throws SQLException {
UserDetails userDetails = new UserDetails ();
userDetails .setId(rs.getInt("ID"));
userDetails .setIntranetId(rs.getString("LOGIN_ID"));
userDetails .setEmailId(rs.getString("EMAIL_ID"));
userDetails .setFirstName(rs.getString("FIRST_NAME"));
userDetails .setMiddleName(rs.getString("MIDDLE_NAME"));
userDetails .setLastName(rs.getString("LAST_NAME"));
userDetails.setPrimaryAnalyst(Boolean.valueOf(rs.getString("IS_PRIMARY")));
userDetails.setStatus(Boolean.valueOf(rs.getString("IS_ACTIVE")));
return userDetails;
};
return jdbcTemplate.queryForObject(query, rowMapper, userId);
}
}catch(EmptyResultDataAccessException e){
UserDetails userDetails = new UserDetails ();
//fill the userDetails fields with the empty values
return userDetails;
}
}