我正在使用spring boot构建REST服务。我的控制器注释了@RestController
。出于调试目的,我想拦截每个控制器方法生成的ResponseEntity
(如果可能)。然后我希望构建一个新的ResponseEntity
,它有点基于控制器生成的ResponseEntity
。最后,新生成的@RestController
class SimpleController
@RequestMapping(method=RequestMethod.GET, value="/getname")
public NameObject categories()
{
return new NameObject("John Smith");
}
}
class NameObject{
private String name;
public NameObject(name){
this.name = name;
}
public String getName(){ return name; }
}
将替换控制器生成的{"name" : "John Smith"}
,并作为响应的一部分返回。
我只希望能够在调试应用程序时执行此操作。否则我希望控制器生成的标准响应返回给客户端。
例如我有控制器
{"result": {"name" : "John Smith"}, "status" : 200 }
这将生成响应:
enum MyEnum {
case `Self`
case AnotherCase
}
但我想更改响应以包括实际响应的状态信息,例如:
let x: MyEnum = .Self
let y = MyEnum.`Self`
任何指示赞赏。
答案 0 :(得分:2)
答案 1 :(得分:0)
您可以使用spring AOP执行此操作,例如:
@Aspect
@Component
public class ResponseEntityTamperer {
@Around("execution(* my.package.controller..*.*(..))")
public Object tamperWithResponseEntity(ProceedingJoinPoint joinPoint)
throws Throwable {
Object retVal = joinPoint.proceed();
boolean isDebug = java.lang.management.ManagementFactory.getRuntimeMXBean()
.getInputArguments().toString()
.contains("jdwp");
if(isDebug && retVal instanceof ReponseEntity) {
// tamper with the entity or create a new one
}
return retVal;
}
}
&#34>了解我们是否处于调试模式"代码来自this answer。