json.tojsonstring()用处
JSON.toJSONString()
是Java中处理JSON数据的工具类org/json/json包下的JSONObject
或JSONArray
提供的方法,它的主要用途是将Java的对象转换成JSON字符串。当你有一个Java的对象,比如地图(HashMap)、列表(List)、自定义对象等,你需要将其发送到服务器、保存到文件或者是通过网络传输,这时可以使用这个方法将这些对象结构化为易于理解的JSON格式文本。
举个例子:
Map<String, Object> map = new HashMap<>();
map.put("name", "John");
map.put("age", 30);
String jsonString = JSON.toJSONString(map);
在这个例子中,map
会被转换为如{"name": "John", "age": 30}
这样的JSON字符串。这样做的好处是可以方便地跨语言交换数据,因为JSON是一种标准的数据交换格式。
public String getParam(ProceedingJoinPoint proceedingJoinPoint) { Map<String, Object> map = new HashMap<String, Object>(); Object[] values = proceedingJoinPoint.getArgs(); String[] names = ((CodeSignature) proceedingJoinPoint.getSignature()).getParameterNames(); for (int i = 0; i < names.length; i++) { map.put(names[i], values[i]); } return JSONObject.toJSONString(map); }
使用Spring AOP获取方法参数并将其转换为JSON字符串
在Spring应用程序中,可以利用AOP(面向切面编程)技术来捕获进入服务层的方法调用及其传递的参数。对于想要记录传入Company
对象的具体JSON表示的需求来说,可以通过创建一个环绕通知或者前置通知的方式,在目标方法执行之前访问其输入参数。
为了实现这一点,首先需要引入依赖项以便能够处理JSON序列化操作:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
接着定义一个Aspect类用于配置切入点表达式以及相应的Advice逻辑。这里展示了一个简单的例子说明如何捕捉到所有带有特定注解的方法,并打印出它们接收到的实际参数值作为JSON格式输出[^2]。
定义方面(Aspect)
import com.fasterxml.jackson.databind.ObjectMapper;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class LoggingAspect {
private final ObjectMapper objectMapper = new ObjectMapper();
@Before("@annotation(org.springframework.web.bind.annotation.PostMapping)")
public void logRequestParameters(JoinPoint joinPoint) throws Exception {
Object[] args = joinPoint.getArgs();
StringBuilder jsonBuilder = new StringBuilder("[");
boolean isFirstElement = true;
for (Object arg : args) {
if (!isFirstElement) {
jsonBuilder.append(", ");
}
String jsonString = objectMapper.writeValueAsString(arg);
jsonBuilder.append(jsonString);
isFirstElement = false;
}
jsonBuilder.append("]");
System.out.println("Received request with parameters: " + jsonBuilder.toString());
}
}
上述代码片段展示了怎样遍历连接点(joinPoint
)所携带的所有实参,并借助Jackson库将每一个非原始类型的参数实例转化为对应的JSON串形式。最后组合这些单独的部分形成完整的数组结构以供后续日志记录或其他用途使用[^3]。
值得注意的是,如果仅关注于HTTP POST请求,则可以在@Before注解处指定更精确的选择器,如上所示采用@PostMapping
标注的目标函数;当然也可以根据实际业务场景调整匹配规则至其他路径或条件之上。
另外需要注意的一点是在某些情况下直接从request body里读取数据可能会遇到只能被消费一次的问题,这时可能就需要考虑基于自定义HttpServletRequestWrapper
的方式来解决这个问题。
相关推荐
















