springssm에서 발생한 예외(Permission_$_jvstac4_1.toString, of type'com.sun.proxy.)
본고는 주로 두 개의springssm에서 만나는 이상을 소개한다.
첫 번째
1.1 exception1-test
1.1.1 이상 정보
Method threw 'org.apache.ibatis.reflection.ReflectionException' exception. Cannot evaluate com.banma.domain.Permission_$$_jvstac4_1.toString()
1.1.2 이상 장면
1)springmvc 다중 테이블 조회에서 지연 불러오기를 사용합니다.서비스 층에서 테스트를 합니다. 로드 지연이기 때문에 10줄 코드를 쓰지 않으면 결과가 틀리지 않습니다. 인터럽트를 쳐서 데이터가 조회되었는지 확인하면 두 번째 테이블이null로 조회되고 이 이상이 목록에 나타납니다.
2) 테스트 코드
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath:applicationContext.xml","classpath:spring-security.xml"})
public class App2 {
@Autowired
private IUserDao userDao;
@Test
public void test2(){
SysUser sysUser = userDao.finById(1);
sysUser.getRoles().get(0).getRoleDesc();
System.out.println(sysUser);
}
}
1.1.3 이상 분석 과정
1) mybatis가 제어하는dao층에 문제가 있음을 알 수 있다. 단지 두 군데,
우선 프로필에 문제가 없다는 것을 확인해야 한다.첫째: 검색 문장, 둘째: 방법 반환 값
2) 데이터베이스에서 조회하여 가져온 sql 문장이라면 첫 번째는 제외할 수 있다
3) 방법 자체는 우선 호출에 있어서 고려하지 않아도 된다. 만약에 방법 자체에 문제가 있다면 서비스층의 호출이 잘못되었는지 검사해도 소용없다. 그래서 방법 자체에 두 가지가 있다. 반환값 유형이 틀렸는지 여부(이 이상이 바로 이것이다).반환된 실체 클래스에 대응하는 속성 및 set/get 방법
4) 결과 검사 후 발견 시 방법의 반환 List 집합에서 실체 클래스가 잘못되었습니다. 왜냐하면 Role 클래스에 또 다른 실체 클래스 대상 속성이 있기 때문입니다
@Select("select r.* from sys_user_role ur inner join sys_role r on ur.roleid=r.id where ur.userid=#{userId}")
@Results({
@Result(id = true,property = "id",column = "id"),
@Result(property = "permissions",column = "id",javaType = List.class,
many = @Many(select = "com.banma.dao.IPermissionDao.findPermissionsByRoleId",
fetchType = FetchType.LAZY))
})
List findRolesByUserId(Integer userId);
public class Role {
private Long id;
private String roleName;
private String roleDesc;
private List permissions;
1.1.4 예외 솔루션
1) 반환값 유형 수정
List findRolesByUserId(Integer userId);
두 번째
2.1 exception1-test
2.1.1 예외 정보
Bean named 'orderServiceImpl' is expected to be of type 'com.banma.service.impl.OrderServiceImpl' but was actually of type 'com.sun.proxy.$Proxy71'
2.1.2 이상 장면
1)springmvc에서의 구현 페이지 방법은 타임즈의 이상을 호출하여 플러그인을 사용하여 페이지 나누기 효과를 실현하고 사물 지원을 추가합니다
2) 테스트 코드
@Controller
@RequestMapping("/order")
public class OrderController {
@Autowired
private OrderServiceImpl orderService;
/**
*
* @return
*/
@RequestMapping("/findByPage")
public ModelAndView findByPage(
@RequestParam(defaultValue = "1") int pageNum,
@RequestParam(defaultValue = "2") int pageSize){
PageInfo pageInfo = orderService.findByPage(pageNum, pageSize);
ModelAndView mv = new ModelAndView();
mv.addObject("pageInfo",pageInfo);
mv.setViewName("order-list");
return mv;
}
@Service
@Transactional
public class OrderServiceImpl implements IOrderService {
@Autowired
private IOrderDao orderDao;
@Override
public List findAll() {
return orderDao.findAll();
}
/**
*
*/
@Override
public PageInfo findByPage(int pageNum,int pageSize) {
//
PageHelper.startPage(pageNum,pageSize);
// dao
List list = orderDao.findAll();
PageInfo pageInfo = new PageInfo<>(list);
return pageInfo;
}
2.1.3 이상 분석 과정
1) 클래스를 실현하고 프록시 대상(proxy)(AOP프로그래밍)을 생성하는 문제임을 알립니다.문제가 발생할 수 있는 부분은 첫째, 프로필(사물 설정(xml: 관리자 DataSourceTransactionManager, 알림 규칙, aop 설정), 둘째, 제어층 controller와 서비스
2) 페이지를 나누는 것을 실현하는 데 문제가 생겼기 때문에 플러그인이 제공하는 PageInfo나 PageHelper 사용이 잘못되었는지 먼저 생각할 수 있습니다. 물론 AOP 프로그래밍이 잘못되었음을 감안하면 이 과정은 프록시 대상에 사용된 것은 사무관리뿐입니다!모든 프로필에 문제가 없으면 서비스 층의 사물 설명(@Transactional), 서비스 구현 클래스를 수신하는 대상(Controller)을 보십시오. 여기에 실현 인터페이스가 있습니다. 모든 사용 에이전트가 JDK 에이전트입니다. 그러면 생성된 에이전트 대상은 인터페이스의 인용을 통해서만 구체적인 실현을 수신할 수 있습니다.
3) 그럼 문제를 찾았네
@Select("select r.* from sys_user_role ur inner join sys_role r on ur.roleid=r.id where ur.userid=#{userId}")
@Results({
@Result(id = true,property = "id",column = "id"),
@Result(property = "permissions",column = "id",javaType = List.class,
many = @Many(select = "com.banma.dao.IPermissionDao.findPermissionsByRoleId",
fetchType = FetchType.LAZY))
})
List findRolesByUserId(Integer userId);
public class Role {
private Long id;
private String roleName;
private String roleDesc;
private List permissions;
2.1.4 예외 솔루션
1) 수신 객체 수정
@Autowired
private IOrderDao orderDao;
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
java 예외(Exception) 처리 메커니즘 상세 정보누구나 이렇게 왔습니다.)그러나 우리는 가능한 한 주도면밀하게 고려하여 프로그램 실패를 초래할 수 있는'낌새'를 요람 속에 말살해야 하기 때문에 파라미터의 합법성 검사를 하는 것이 필요하다.그 중에서 매개 변수 검사...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.