Как сохранить детали заказа, связанные с пользователем, и как вернуть данные заказа, связанные с данными пользователя, на основе параметров URL? - PullRequest
0 голосов
/ 05 апреля 2019

Я создал сущности Пользователь и Заказ, как показано ниже. Чего я хочу добиться, так это того, что если задано http://localhost:8080/users/username?, я хочу вернуть только данные пользователя на основе предоставленного имени пользователя. если http://localhost:8080/users/username?detail=true, Я хочу вернуть детали пользователя и детали заказа для предоставленного имени пользователя. Как мне этого добиться?

User.java

@Entity
public class User {
   @Id
   @GeneratedValue(strategy = GenerationType.AUTO)
   private long id;
   private String userName;
   private String password;
   private String firstName;
   private String lastName;
   private String gender;
   private String lastLoggedIn;
   @OneToMany
   List<Order> listOfOrder;

   //constructors
   //getter and setter

}

1010 * Order.java * @Entity public class Order { @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; private float amount; private String createdAt; private String deliveredDate; //constructors //getter and setter } Controller.java

//CREATE CUSTOMER
@RequestMapping(method = POST, value = "/create")
public ResponseEntity createCustomerDetails(@RequestParam String userName, String password, String firstName,
                                            String lastName, String gender) {
    String lastLogged = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(Calendar.getInstance().getTime());
    User user = new User(userName, password, firstName, lastName, gender, lastLogged);
    userRepository.save(user);
    return ResponseEntity.status(OK).body(user.getId() + " User were successfully saved");
}

//CREATE ORDER
@RequestMapping(method = POST, value = "/order/{userName}")
public ResponseEntity createOrder(@PathVariable ("userName") String userName, @RequestParam float amount)
{
    String createdAt = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(Calendar.getInstance().getTime());
    String deliveredDate = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(Calendar.getInstance().getTime());
    User user = orderService.findUser(userName);
    if (!user.equals(null))
    {
        Order order = new Order(amount,createdAt,deliveredDate);
        user.getListOfOrder().add(order);
        return ResponseEntity.status(OK).body("order details were saved under "+user.getUserName() + " "+user.getFirstName());
    }

    return ResponseEntity.status(NOT_FOUND).body(null + " was not found");

}

   //GET THE USER DETAILS
@RequestMapping(method = GET, value = "/users/{userName}")
public ResponseEntity getUserDetail(@PathVariable("userName") String userName,
                                          @RequestParam(defaultValue ="none", required = false) String detail) {
    if (!detail.equals("none")){
        return .....;
    }else { 

        return ........;
    }
}

UserRepository

@Repository
public interface UserRepository extends CrudRepository<User, Long> {
    User findByUserName(String userName);
}

1 Ответ

1 голос
/ 06 апреля 2019

Если вы в порядке с сериализацией вручную, вы можете использовать JsonView, чтобы определить, что сериализуется.

https://www.baeldung.com/jackson-json-view-annotation

User.java

import com.fasterxml.jackson.annotation.JsonView;

public class User {

    @JsonView(Views.Lite.class)
    private String name;

    @JsonView(Views.Full.class)
    private List<Order> orders;

}

Views.java

public class Views {

    public static class Lite {}

    public static class Full extends Lite {}

}

UserController.java

import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @Autowired
    private UserRepository userRepository;

    @Autowired
    private ObjectMapper mapper;

    @GetMapping("/user/{username}")
    public ResponseEntity<String> getUserDetail(@PathVariable String username, @RequestParam(required = false) String detail) throws JsonProcessingException {
        User user = userRepository.findByUserName(username);
        Class viewClass = Views.Lite.class;
        if (!StringUtils.isEmpty(detail)) {
            viewClass = Views.Full.class;
        }
        return ResponseEntity.status(HttpStatus.OK)
                    .body(mapper.writerWithView(viewClass).writeValueAsString(user));
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...