Saya mengalami kesulitan mendapatkan respons sebagai format JSON saat mengirim metode posting. Kontroler dan kelas respons saya ada di bawah. Saya juga menggunakan dependensi Jackson di pom.xml
saya dan, saya menggunakan @RestController
sebagai anotasi Pengendali.
<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>
Saya mengharapkan respons sebagai {Avalue:a, Bvalue:b} tetapi sebaliknya mengembalikan null untuk respons. Bisakah Anda membantu saya menemukan di mana saya hilang?
@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;
}
}
Saya menggunakan logger di controller saya dan saya bisa melihat logger lewat ke tanda kurung lain tanpa masalah. Ketika saya mencatat objek pr.a dan pr.b saya, mereka mengembalikan nilai yang diharapkan. Namun respons masih mengembalikan nol.
4 jawaban
Anda akan membutuhkan pengambil/penyetel untuk kelas PostResponse
@Autowired private PostService postService;
Coba beri anotasi @RestController
di kelas.
Apakah Anda memiliki Getter dan Setter di kelas bawah?
public class PostResponse {
@JsonProperty("Avalue")
public String A_VALUE;
@JsonProperty("Bvalue")
public String B_VALUE;}
Anda memiliki A_VALUE dan B_VALUE sebagai atribut di kelas saat Anda menyetel nilai a_value dan b_value.
Lakukan Autowire kelas PostService Anda dan juga hapus dependensi ini (Jackson) ketika Anda sudah memiliki dependensi starter-web. Saya juga menyarankan Anda untuk menggunakan anotasi @Data dan @NoArgsConstructor Lombok di tingkat kelas.
PostResponse
Anda? Selain itu, karena Anda menggunakan Spring-Boot, singkirkan versi dependensi Jackson. Anda tidak membutuhkan mereka. Bahkan, Anda seharusnya tidak membutuhkannya jika Anda memilikispring-boot-starter-web
sebagai ketergantungan.created
bukannull
?postService.createVInfo(v);
. Tambahkan kode yang relevan untuk dapat membantu Anda lebih banyak