【发布时间】:2023-03-17 12:30:01
【问题描述】:
我的应用程序当前运行的是 Gson 而不是 jackson,如何使用 gson 解析传入的表单提交?
我目前得到
2015-10-26 14:14:59.027 ERROR 12876 --- [nio-8080-exec-1] com.exp.controllers.UserController:Bean 对象不能为空;嵌套异常是 java.lang.IllegalArgumentException: Bean object must not be null
@RestController
public class UserController {
@Autowired
private UserDao userDao;
@Autowired
private GsonHttp gsonHttp;
private final Logger log = LoggerFactory.getLogger(this.getClass());
@RequestMapping(value="/createPOST", method = RequestMethod.POST)
@ResponseBody
public ResponseData createPOST(String json) {
User user = null;
try {
user = gsonHttp.getGson().fromJson(json, User.class);
userDao.save(user);
}
catch (Exception ex) {
log.error(ex.getMessage());
return new ResponseData(false, Arrays.asList("Error with user creation."));
}
return new ResponseData(true, Arrays.asList(user));
}
}
用这个:
@Repository
public class GsonHttp {
private Gson gson;
public GsonHttp(){
this.gson = new Gson();
}
public Gson getGson() {
return gson;
}
public void setGson(Gson gson) {
this.gson = gson;
}
}
【问题讨论】:
-
你为什么要手动映射所有这些?如果您只有适当的转换器(如果 Gson 在类路径上,Spring Boot 应该为您添加),您可以将
@ModelAttribute User user声明为参数,所有这些都是自动的。 -
当您将 GsonHttp 更改为使用 @Component 注释时会发生什么???像 GsonHttp 这样的泛型类也经常被放在泛型包中。但要自动装配,它需要位于主应用程序配置的子包中。
标签: java spring spring-mvc spring-boot