如何在Java Spring中将QueryParams中的JSON转换为Object?

ryoqjall  于 2023-01-24  发布在  Java
关注(0)|答案(2)|浏览(159)

我有这个疑问

http://localhost:8555/list/csv?search={}

这里search是一个json对象(省略了其他的参数,因为它们在这里是不相关的)。我怎样才能把它转换成一个嵌套对象呢?

public record CsvParams<T>(
    T search,
    /* Other query params */ ) {}

现在我得到错误,字符串不能转换成对象。

class java.lang.String cannot be cast to class classname

有没有办法做到这一点?旧的解决方案使用ObjectMapper将字符串转换为corresbonding对象。我希望也许有一种方法可以做得更简单,并删除这个样板文件。

i86rm4rw

i86rm4rw1#

查询参数的任何单个值都不能自动转换为非基元类型。您可以将多个参数转换为一个类,但不能将一个碰巧是JSON AFAIK的参数转换为类。但是您可以创建一个转换器自定义反序列化程序,然后在不同的控制器中使用它,但最终您仍然使用ObjectMapper
有关如何执行后者的更多信息,请单击此处:https://www.baeldung.com/spring-mvc-send-json-parameters

cnjp1d6j

cnjp1d6j2#

如果你必须使用查询参数,那么我不认为你可以通过Sping Boot 自动转换它。但是如果你使用POST或PUT方法,并且可以在请求体中将参数作为请求参数传递,那么你的JSON参数可以通过Spring引导自动转换为类示例,而不需要你做任何努力。然而,如果必须使用查询参数(假设你必须使用GET方法,所以你没有请求主体),你可以使用Json-Jackson库或Gson库来将你的Json解析成类示例。如果你使用Jackson,你将需要使用类ObjectMapper。有关Jackson库的信息,请参见this site;有关ObjectMapper类的信息,请参见Javadoc here。但是,我写了自己的JsonUtils,非常适合像你这样的简单用例。它允许用一个方法将简单的JSON解析成一个类。它非常简单,直截了当。它是Jackson库的一个薄 Package 器。有关方法readObjectFromJsonString的信息,请参见Javadoc。JsonUtils类是开放源代码MgntUtils库的一部分。您可以在Maven Central上将其作为Maven工件获取,也可以在Github上将其作为jar(包含源代码和Javadoc)获取

相关问题