То, чего я пытаюсь достичь, это получить пользовательский ответ от RequestMapping, ниже приведена структура json, которую я пытаюсь получить в случае массива объектов:
{
"error": false,
"message": "the message",
"data": [{},{},...]
}
и ниже в случае объекта
{
"error": false,
"message": "the message",
"data": {}
}
Код работает нормально, но проблема в том, что «данные» не всегда имеют массив, в нем может храниться объект, поэтому я попытался создатьпользовательский класс POJO, который содержит мой пользовательский ответ, и когда я хочу аннотировать два атрибута с одинаковым именем, я получаю следующую ошибку
Не удалось найти приемлемое представление
А что, если я создам другой класс, который будет содержать те же атрибуты, но с JsonObject, но не с массивом, есть ли лучший способ добиться этого?
Ниже приведены мои классы:
@JsonInclude(Include.NON_NULL)
public class JsonResponseObject<T> implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private boolean error;
private String message ;
@JsonProperty(value="data")
private ArrayList<T> array;
@JsonProperty(value="data")
private Object object ;
public JsonResponseObject() {
}
public boolean isError() {
return error;
}
public void setError(boolean error) {
this.error = error;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public ArrayList<T> getArray() {
return array;
}
public void setArray(ArrayList<T> array) {
this.array = array;
}
public Object getObject() {
return object;
}
public void setObject(Object object) {
this.object = object;
}
}
UserJsonController.java:
@RestController()
@RequestMapping(value = "/json")
public class UserJsonController {
@Autowired
private UserRepository userDAO;
@RequestMapping(value = "/users", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Object> getUsers() {
ArrayList<Users> entityList = (ArrayList<Users>) userDAO.findAll();
JsonResponseObject<Users> jsonResponse = new JsonResponseObject<Users>();
jsonResponse.setError(false);
jsonResponse.setMessage("test");
jsonResponse.setArray(entityList);
return new ResponseEntity<>(jsonResponse, HttpStatus.OK);
}
@RequestMapping(value = "/users/{id}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Object> getUserByID(@PathVariable int id) {
JsonResponseObject<Users> jsonResponse = new JsonResponseObject<Users>();
jsonResponse.setError(false);
jsonResponse.setMessage("test");
jsonResponse.setObject(userDAO.findById(id).get());
return new ResponseEntity<>(jsonResponse, HttpStatus.OK);
}}