我有这个疑问
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对象。我希望也许有一种方法可以做得更简单,并删除这个样板文件。
2条答案
按热度按时间i86rm4rw1#
查询参数的任何单个值都不能自动转换为非基元类型。您可以将多个参数转换为一个类,但不能将一个碰巧是JSON AFAIK的参数转换为类。但是您可以创建一个转换器自定义反序列化程序,然后在不同的控制器中使用它,但最终您仍然使用
ObjectMapper
。有关如何执行后者的更多信息,请单击此处:https://www.baeldung.com/spring-mvc-send-json-parameters
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)获取