ResponseEntity не возвращает ответ json для метода Post
Мне трудно получить ответ в формате JSON при отправке почтового метода. Мой контроллер и класс ответа ниже. Также я использовал зависимости Джексона в моем
pom.xml
и я использую
@RestController
как аннотация контроллера.
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<artifactId>jackson-annotations</artifactId>
<groupId>com.fasterxml.jackson.core</groupId>
<version>2.8.0</version>
</dependency>
Я ожидаю, что ответ будет как {Avalue:a, Bvalue:b}, но вместо этого он возвращает null для ответа. Можете ли вы помочь мне найти, где я пропал?
@RestController
public class Controller{
private PostService postService;
@RequestMapping(value = "/create", method = RequestMethod.POST, produces = {MediaType.APPLICATION_JSON_VALUE})
public ResponseEntity<PostResponse> create(@RequestBody VInfo v) {
VInfo created = postService.createVInfo(v);
PostResponse pr = new PostResponse();
if (created == null) {
return new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR);
} else {
pr.a_value= v.a_value;
pr.b_value= v.b_value;
return new ResponseEntity<PostResponse>(pr,HttpStatus.OK);
}
}
}
public class PostResponse {
@JsonProperty("Avalue")
public String A_VALUE;
@JsonProperty("Bvalue")
public String B_VALUE;
}
@Service
public class PostService {
@Autowired
private CreateVRepository postRepository;
public VInfo createVInfo(VInfo vInfo){
VInfo v1= new VInfo ();
v1.setA_VALUE(vInfo.getA_VALUE());
v1.setB_VALUE(vInfo.getB_VALUE());
postRepository.save(v1);
return v1;
}
}
Я использовал регистратор на своем контроллере, и я вижу, как регистратор без проблем переходит в скобки else. Когда я регистрирую свои объекты pr.a и pr.b, они возвращают ожидаемые значения. Однако ответ по-прежнему возвращает null.
4 ответа
У вас есть атрибуты A_VALUE и B_VALUE в вашем классе, тогда как вы устанавливаете значения a_value и b_value.
Сделайте Autowire свой класс PostService, а также удалите эти (Джексон) зависимости, если у вас уже есть зависимость start-web. Я бы также рекомендовал вам использовать аннотации Lombok @Data и @NoArgsConstructor на уровне класса.
У вас есть геттеры и сеттеры в классе ниже?
public class PostResponse {
@JsonProperty("Avalue")
public String A_VALUE;
@JsonProperty("Bvalue")
public String B_VALUE;}