gpt4 book ai didi

java - 将 JSON HttpMessageConverters 与 Spring Boot 结合使用

转载 作者:行者123 更新时间:2023-12-02 11:47:17 27 4
gpt4 key购买 nike

当调用我的 API 时,我尝试使用 HTTPMessageConverters 将 JSON 输入转换为对象。但是,当我尝试将 API 输入映射到 POJO 时,我看到一条错误消息。鉴于错误消息,我认为问题与 CreateUserRequest 类实现有关。任何建议将不胜感激!请看下面:

错误消息:

{
"timestamp": 1515127031483,
"status": 400,
"error": "Bad Request",
"exception": "org.springframework.http.converter.HttpMessageNotReadableException",
"message": "Could not read document: Cannot construct instance of `com.api.service.request.CreateUserRequest`, problem: email\n at [Source: (PushbackInputStream); line: 6, column: 1]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.api.service.request.CreateUserRequest`, problem: email\n at [Source: (PushbackInputStream); line: 6, column: 1]",
"path": "/create"
}

API 输入:

curl -X PUT \
http://localhost:8080/create \
-H 'authorization: Basic Ymx1bWV3OjEyMw==' \
-H 'cache-control: no-cache' \
-H 'content-type: application/json' \
-d '{
"CreateUserRequest" : {
"email" : "--REDACTED--",
"password" : "--REDACTED--"
}
}'

API Controller :

@RestController
public class BaseActivity {

@RequestMapping(path = "/create", method = RequestMethod.PUT)
@ResponseStatus(HttpStatus.OK)
public @ResponseBody String createUser (final @RequestBody CreateUserRequest createUserRequest) { ... }

WebConfig:

@EnableWebMvc
@Configuration
@ComponentScan(basePackages = {"com.api.service"})
public class ActivityConfig extends WebMvcConfigurerAdapter {

@Override
public void configureMessageConverters(
List<HttpMessageConverter<?>> converters) {
converters.add(mappingJackson2HttpMessageConverter());
super.configureMessageConverters(converters);
}

@Bean
public MappingJackson2HttpMessageConverter
mappingJackson2HttpMessageConverter() {
MappingJackson2HttpMessageConverter jsonConverter = new
MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = new ObjectMapper()
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
jsonConverter.setObjectMapper(objectMapper);
return jsonConverter;
}
}

请求对象:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class CreateUserRequest implements Serializable {

private static final long serialVersionUID = 4260711945094777831L;

@NonNull
private String email;

@NonNull
private String password;
}

注意:当我替换 createUserRequest 类中的 lombok 注释时,会调用 API,但电子邮件/密码属性为空。

最佳答案

你的RequestBody是这样的

{
"CreateUserRequest" : {
"email" : "--REDACTED--",
"password" : "--REDACTED--"
}
}

但我认为应该像下面这样:

{
"email" : "--REDACTED--",
"password" : "--REDACTED--"
}

关于java - 将 JSON HttpMessageConverters 与 Spring Boot 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48107550/

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