gpt4 book ai didi

java - 如何检测所有 json 元素是否用于创建 Java 对象

转载 作者:行者123 更新时间:2023-12-02 00:55:29 25 4
gpt4 key购买 nike

我想在我的 REST API 端点 ( https://stackoverflow.com/a/20597044/4828427 ) 上应用“严格”策略。作为参数,我没有使用 JsonObject,而是使用 MyObject。

@RequestMapping(value = "/api/v1/authenticate", method = RequestMethod.POST)
public ResponseEntity<TokenDTO> createAuthenticationToken(@RequestBody JwtRequest authenticationRequest) {

所以我让 spring 将 json 反序列化为对象,并且我直接使用对象。示例:

authenticationRequest.getUsername();

我正在寻找一些实用程序或注释来检测请求中是否有任何未使用的 json 元素,或者不使用适当的警告处理程序来处理它。

最佳答案

您可以像这样使用@JsonAnySetter:

1-您定义一个 BaseRequestDTO 类:

public abstract class BaseRequestDTO {
@JsonAnySetter
public Map<String, Object> additionalData=new HashMap<>();
}

字段additionalData将保存所有不在DTO中的json字段

2- 让你的 d 扩展它,例如:

class JwtRequest extends BaseRequestDTO{
public String username;
public string password;
}

3-写一个方面来应用你的“严厉”策略:

@Aspect
@Component
public class ControllerArgsValidator {
@Pointcut("within(@org.springframework.web.bind.annotation.RestController *)")
public void restController() {
}
@Pointcut("within(@org.springframework.stereotype.Controller *)")
public void controller() {
}

@Around("controller() || restController()")
public Object validate(ProceedingJoinPoint point) throws Throwable {
Object[] args = point.getArgs();
for (Object arg : args) {
if (arg instanceof BaseRequestDTO) {
if((BaseRequestDTO) arg).additionalData.isEmpty())
//do what ever;
}
}
return point.proceed();
}

关于java - 如何检测所有 json 元素是否用于创建 Java 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57822177/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com