I am getting Bad Request when trying to do POST to createCategory end point. All endpoint works but not for createCategory. Am i doing something wrong?
All my DTO classes using the same annotation but only this one doesn't work. Is it possible that spring doesn't accept single variable response body?
endpoint: http://localhost:8180/api/v1/categories
request body in json:
{
"name": "Category 1"
}
CategoryController:
@RestController
@RequiredArgsConstructor
@RequestMapping("api/v1/categories")
public class CategoryController {
private final CategoryApplicationService categoryApplicationService;
@PostMapping
public ResponseEntity<Data<CategoryIDResponse>> createCategory(@RequestBody CreateCategory createCategory){
return new ResponseEntity<>(new Data<>(categoryApplicationService.createCategory(createCategory)), HttpStatus.CREATED);
}
@PatchMapping
public ResponseEntity<Data<CategoryIDResponse>> updateCategory(@RequestBody UpdateCategory updateCategory){
return new ResponseEntity<>(new Data<>(categoryApplicationService.updateCategory(updateCategory)), HttpStatus.OK);
}
@DeleteMapping("/{categoryID}")
public ResponseEntity<Data<CategoryIDResponse>> deleteCategory(@PathVariable("categoryID") UUID categoryID){
return new ResponseEntity<>(new Data<>(categoryApplicationService.deleteCategory(categoryID)), HttpStatus.OK);
}
@GetMapping("/{categoryID}")
public ResponseEntity<Data<GetCategoryResponse>> getCategory(@PathVariable("categoryID") UUID categoryID){
return new ResponseEntity<>(new Data<>(categoryApplicationService.getCategory(categoryID)), HttpStatus.OK);
}
@GetMapping
public ResponseEntity<Data<List<GetCategoryResponse>>> getAllCategory(){
return new ResponseEntity<>(new Data<>(categoryApplicationService.getAllCategory()), HttpStatus.OK);
}
}
DTO:
CreateCategory:
@Getter
@Builder
@AllArgsConstructor
public class CreateCategory {
@NotNull
private final String name;
}
CodePudding user response:
This is happening because you have not added NoArgsConstructor in your DTO.
@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class CreateCategory {
private String name;
}
Change your DTO to above code. Working fine for me.
Hope this helps.
CodePudding user response:
Actually, you need to add @Setter annotation to the CreateCategory class by removing the final keyword, because spring will set the fields to the objects using setter methods, and you cant use setters with final variables.