JSON Ошибка на стороне клиента при отправке ResponseEntity со стороны сервера после отправки запроса - PullRequest
0 голосов
/ 03 июля 2018

У меня есть угловое / пружинное загрузочное веб-приложение. Когда я отправляю запрос на создание пользователя, приложение на стороне клиента не может прочитать тело объекта ответа, который я отправляю после операции. Ошибка:

{error: SyntaxError: Unexpected token U in JSON at position 0 at JSON.parse (<anonymous>) at XMLHttp…, text: "User successfully created."}

Я знаю, что это вызвано тем, что содержимое тела не в формате JSON. Но ошибка сохраняется, даже когда я добавляю produces = "application/json" в качестве атрибута к аннотации @PostMapping.

Вот код:

@RestController
@RequestMapping("api/user")
public class UserController {

    private final Log logger = LogFactory.getLog(this.getClass());

    @Autowired
    UserService userService;

    @Autowired
    UserDao userDao;

    @PostMapping(path = "/create", produces = "application/json")
    private ResponseEntity<String> createNewUser(@RequestBody UserCreateDTO newUser) {
        logger.info("name is: " + newUser.getUserName());
        Status status = userService.createUser(newUser);
        return ResponseEntity.status(status.isSuccess() ?
                HttpStatus.CREATED : HttpStatus.BAD_REQUEST).body(status.getInfo());
    }

Что я должен сделать, чтобы решить эту проблему? Я думаю, что это как-то связано с использованием ResponseEntity. Я мог бы просто отправить объект статуса DTO, который я создал, вместо этого, но я хочу иметь возможность манипулировать кодом httpStatus, который также отправляется обратно, поэтому я хочу использовать вместо него ResponseEntity.

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

На самом деле да, вы используете ResponseEntity, но с String в качестве тела, потому что вы используете:

.body(status.getInfo());

Вам необходимо указать объект в теле, вы можете создать POJO, который будет содержать сообщение для вас, обернуть строку status.getInfo() и она будет читаться как JSON.

Сообщение POJO класс:

public class MessageObject {
    private String message;
    //Constructors, getter and setter
}

Ваш код возврата будет:

return ResponseEntity.status(status.isSuccess() ?
                HttpStatus.CREATED : HttpStatus.BAD_REQUEST).body(new MessageObject(status.getInfo()));
0 голосов
/ 03 июля 2018

Похоже, вы возвращаете строковый литерал вместо объекта json. Возвращаемый объект при преобразовании в json должен иметь вид

{
  "status": "user created successfully"
}

попробуйте вернуть ваш полный status объект вместо status.getInfo(), тогда ваш возвращаемый объект должен выглядеть примерно так:

{
   "info": "user created successfully"
}

и вы можете позвонить status.info в своем javascript, чтобы сослаться на возвращение

и вам придется изменить тип возврата на RepsonseEntity<Status>

...