Пользовательский отклик @RestController - Джексон - PullRequest
0 голосов
/ 03 июня 2018

То, чего я пытаюсь достичь, это получить пользовательский ответ от 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);

}}

...