2016-04-06 33 views
0

REST denetleyicili Spring MVC uygulamasını test ettim. Bazı yöntemlerimin yönlerini uygulamak istiyorum, ancak bu yönteme hiçbir şey denmediğinde ve sebebini bulamıyorum. Benim Yapılandırma ve Uygulama sınıftır:Spring Boot @Aspect J günlüğe kaydetme

@Aspect 
@Component 
public class Logging { 

private static final Logger logger = LoggerFactory.getLogger(GreetingController.class); 
@Pointcut("execution(* org.test.restspring.model.Greeting.getCreatedDate(..))") 
private void getDate(){} 

@Before("getDate()") 
public void beforeGettingDate(){ 
    logger.info("Date is asked"); 
} 

@After("getDate()") 
public void afterGettingDate(){ 
    logger.info("Date is received"); 
} 

} Benim basit fasulye

geçerli::

@SpringBootApplication(scanBasePackages = "org.test") 
@EnableAspectJAutoProxy 
public class TestaopApplication { 

public static void main(String[] args) { 
    SpringApplication.run(TestaopApplication.class, args); 
} 
} 

Benim boy sınıftır

@Component 
public class Greeting { 

private long id; 
private String content; 
private Date created; 

public Greeting() { } 
public Greeting(long id, String content) { 
    this.id = id; 
    this.content = content; 
    this.created = Calendar.getInstance().getTime(); 
} 

public long getId() { 
    return id; 
} 

public String getContent() { 
    return content; 
} 

public String getCreatedDate(){ 
    return created.toString(); 
} 
} 

Öyle benim Denetleyici:

@RestController 
public class GreetingController { 

private static final String template = "Hello, %s!"; 
private static final Logger logger = LoggerFactory.getLogger(GreetingController.class); 
private final AtomicLong counter = new AtomicLong(); 

@RequestMapping("/greeting") 
public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) { 
    Greeting response = new Greeting(counter.incrementAndGet(), 
      String.format(template, name)); 
    logger.info(response.getCreatedDate()); 
    return response; 
} 


} 

Lütfen bu sorunla bana yardımcı olun.

cevap

0

Açık yapıcı çağrısı (new Greeting(...)) aracılığıyla oluşturulan fasulye, Spring tarafından yönetilmez. Bu yüzden yönünüz uygulanmadı.

Prototip kapsamını kullanmayı deneyebilirsiniz. Bu şekilde Bahar, her istek için yeni bir fasulye çekirdeği örneği yaratır. fasulye

:

@Component 
@Scope("prototype") 
public class Greeting { 

ve kontrol:

@RestController 
public class GreetingController { 

private static final String template = "Hello, %s!"; 
private static final Logger logger = LoggerFactory.getLogger(GreetingController.class); 
private final AtomicLong counter = new AtomicLong(); 

@Autowired 
private Greeting greeting; 

@RequestMapping("/greeting") 
public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) { 
    greeting.setId(counter.incrementAndGet()); 
    greeting.setContent(String.format(template, name)) 
    logger.info(response.getCreatedDate()); 
    return response; 
} 



} 
+0

bir hata gor ama @Pointcut mevcut olmayan yöntemi ile yerine zaman (bu yönü yöntemine uygulanmaz) , Hiç hatam yok. Bu hata: HTTP mesajı yazılamadı: org.springframework.http.converter.HttpMessageNotWritableException: İçerik yazılamadı: Sınıf org.springframework.aop.TrueClassFilter için hiçbir serializer bulunamadı ve BeanSerializer oluşturmak için keşfedilen hiçbir özellik (istisnayı önlemek için, SerializationFeature.FAIL_ON_EMPTY_BEANS'ı devre dışı bırakın)) – Yuriy

+0

Ve içimde getters ve ayarlayıcılar var Greeting sınıfı. – Yuriy