[英]Spring boot - gson singleton?
我的應用程序當前運行Gson而不是jackson,如何使用gson解析傳入的表單提交?
我目前得到
2015-10-26 14:14:59.027錯誤12876-[nio-8080-exec-1] com.exp.controllers.UserController:Bean對象不能為null; 嵌套異常為java.lang.IllegalArgumentException:Bean對象不能為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;
}
}
當您嘗試保存空對象時,存儲庫將引發“ Bean對象不能為空”。
userDao.save(user) //User is null
您的對象為null的原因是因為您不添加@RequestBody就無法獲取json,因此請更改json參數以具有此批注
public String createPost(@RequestBody String json) { //Added @RequestBody
正如您所解釋的,默認情況下,傑克遜是默認解析器,用GSON替換它很容易。
SRC /主/資源/ application.properties
spring.http.converters.preferred-JSON-mapper.gson =真
這顯然需要在類路徑上使用GSON。
然后這樣重寫您的create post方法
@RequestMapping(value="/createPOST", method = RequestMethod.POST)
@ResponseBody
public ResponseData createPOST(@RequestBody User user) {
userDao.save(user);
return new ResponseData(true, Arrays.asList(user));
}
基本HTTPMessageConverterClass- https://github.com/spring-projects/spring-boot/blob/master/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/HttpMessageConvertersAutoConfiguration.java
-
確保特別注意最后一個來源中的PreferGsonOrMissingJacksonCondition類。 如果將gson配置為首選,或者如果Gson在類路徑上而傑克遜不在,則使用GSON(例如,將其從Maven或Gradle中排除)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.